saj*_*hrw 1 java algorithm recursion
我对下面的代码段的结果有一个模糊的理解.请帮我用一个例子清楚地理解这一点.
这是我的第一个代码段:
public static void main(String args[]) {
int number = 4;
System.out.print(what(number));
}
public static int what(int number){
if(number < 2)
return 1;
else
return what(number-2) + what(number -1);
}
Run Code Online (Sandbox Code Playgroud)
结果返回5.但是当尝试为操作数单独运行此递归方法时,两个代码段都返回1作为结果.
以下代码返回1作为结果:
public static int what(int number){
if(number < 2)
return 1;
else
return what(number-2);
}
Run Code Online (Sandbox Code Playgroud)
这个代码同样适用:
public static int what(int number){
if(number < 2)
return 1;
else
return what(number-1);
}
Run Code Online (Sandbox Code Playgroud)
我需要了解这是如何工作的.
第一种方法对1进行求和,而后一种方法只打印结果what(),可以是或者不少于1.
第一种方法的示例:
what(4)= what(2)+ what(3)= what(0)+ what(1)+ what(1)+ what(2)= 1 + 1 + 1 + what(0)+ what(1) = 3 + 1 + 1 = 5
或者,如果您想要更好的可视化:
what(4)
/ + \
/ \
what(2) what(3)
/ \ / \
what(0) what(1) what(1) what(2)
=1 =1 =1 / \
what(0) what(1)
=1 =1
Run Code Online (Sandbox Code Playgroud)
第二种方法的示例:
what(4)= what(2)= what(0)= 1
what(4)
|
what(2)
|
what(0)
=1
Run Code Online (Sandbox Code Playgroud)
最终方法的示例:
what(4)= what(3)= what(2)= what(1)= 1
what(4)
|
what(3)
|
what(2)
|
what(1)
=1
Run Code Online (Sandbox Code Playgroud)