整数乘法的递归定义

don*_*yor 1 java recursion function

这是乘以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    }
Run Code Online (Sandbox Code Playgroud)

我正在玩争论2而且3:结果是6,但为什么呢?

在第5行,我将获得0第二之后a=a-1;,然后d3return 3而不是6.我是傻瓜还是让你感到困惑?

Jon*_*eet 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  
Run Code Online (Sandbox Code Playgroud)


Roh*_*ain 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;
Run Code Online (Sandbox Code Playgroud)

注意: -

递归调用的状态存储在堆栈中.因此,当达到基本条件时,堆栈开始展开,将当前调用的结果传递给前一个调用,从而达到它以最终结果开始的状态.