对于以下代码段的结果,我有一个模糊的理解。请以一个例子来帮助我清楚地理解这一点。
这是我的第一个代码段:
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);
}这将返回5作为结果。但是,当试图为操作数单独运行此递归方法时,两个代码段返回1作为结果。
下面的代码返回1作为结果:
public static int what(int number){
if(number < 2)
return 1;
else
return what(number-2);
}同样的情况也适用于这个代码:
public static int what(int number){
if(number < 2)
return 1;
else
return what(number-1);
}我得弄明白这是怎么回事。
发布于 2015-07-30 08:14:04
第一种方法与1之和,而后一种方法只打印what()的结果,它可以是1,也可以是1。
第一种方法的例子:
什么(4)=什么(2)+什么(3)=什么(0)+什么(1)+什么(1)+什么(2)=1+1+什么(0)+什么(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第二种方法的例子:
什么(4)=什么(2)=什么(0)=1
what(4)
|
what(2)
|
what(0)
=1最后一种方法的例子:
什么(4)=什么(3)=什么(2)=什么(1)=1
what(4)
|
what(3)
|
what(2)
|
what(1)
=1发布于 2015-07-30 08:16:15
当您为每个递归调用what(number-2) + what(number -1);时,会将1添加到现有的结果中。
但是,当您独立调用它们时,您只是简单地重写了前面的计算并返回1。
尝试放置一个调试点并分析代码的运行情况。
发布于 2015-07-30 08:21:52
有关主方法中带有参数4的方法what()的递归调用,请参见递归树-
4
/ \
2 3
/ \
1 2现在您可以从递归树中看到对what()的方法调用是如何发生的。实际上,在what()方法中,如果方法的参数大于2,则调用被分支为what()的另外两个调用。
https://stackoverflow.com/questions/31718411
复制相似问题