1

aこれは、とを乗算する関数ですb

0    int mult(int a, int b){
1      if(a==0){
2        return 0;
3      } else{
4        a=a-1;
5        int c = mult(a,b);
6        int d = b + c;
7        return d;
8      }
9    }

私は引数2とで遊んでいます3: 結果は です6が、なぜですか?

05 行目では、2 番目の後に取得しa=a-1;、次にdis 3thenreturn 3と notを取得し6ます。私は愚かですか、それともあなたを混乱させますか?

4

2 に答える 2

6

あなたは再帰に混乱しています。

mult(2, 3):
  calls mult(1, 3)
    mult(1, 3):
      calls mult(0, 3)
        mult(0, 3):
          returns 0
      d = 3 + 0
      returns 3
  d = 3 + 3
  returns 6  
于 2012-10-26T10:35:01.607 に答える
5

一歩一歩進んでみましょう [ mult(2, 3) ]: -

 1. (a = 2, b = 3) : - 
     a = 1;
     c = mult(1, 3); ---->    2. (a = 1, b = 3) : - 
                                  a = 0;
                                  c = mult(0, 3); -----> 3. (a = 0, b == 3) : -
                                                             return 0
---------------------------------------------------------------------------------
                                  c = 0;
                                  d = (b + c) = 3;
                                  return 3; 
------------------------------------------------------------------
     c = 3;
     d = b + c == 3 + 3 = 6

     return 6;

: -

再帰呼び出しの状態はスタックに格納されます。したがって、基本条件に達すると、スタックは巻き戻しを開始し、現在の呼び出しの結果を前の呼び出しに渡し、最終結果で開始した状態に到達します。

于 2012-10-26T10:36:18.530 に答える