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;,然后d是3再return 3而不是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)
让我们一步一步走[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)
注意: -
递归调用的状态存储在堆栈中.因此,当达到基本条件时,堆栈开始展开,将当前调用的结果传递给前一个调用,从而达到它以最终结果开始的状态.