Recursion 理解这个递归调用中的逻辑
我是新加入董事会的,我很抱歉我是一个彻头彻尾的傻瓜,我只是想了解这个递归方法的逻辑。我也在黑板上搜索了这个问题,发现了一些类似的问题,但没有回答我的问题Recursion 理解这个递归调用中的逻辑,recursion,Recursion,我是新加入董事会的,我很抱歉我是一个彻头彻尾的傻瓜,我只是想了解这个递归方法的逻辑。我也在黑板上搜索了这个问题,发现了一些类似的问题,但没有回答我的问题 public int bunnyEars(int bunnies) { if(bunnies == 0) return 0; return 2 + bunnyEars(bunnies - 1); } 我知道这是有效的。但是我不清楚递归调用,其中1是从过去的兔子数量中减去的。。更准确地说,数字1如何作为参数bunnyEars(1)传
public int bunnyEars(int bunnies) {
if(bunnies == 0) return 0;
return 2 + bunnyEars(bunnies - 1);
}
我知道这是有效的。但是我不清楚递归调用,其中1是从过去的兔子数量中减去的。。更准确地说,数字1如何作为参数bunnyEars(1)传入,并且仍然得到2的正确答案,而不被减去并等于0,从而退出方法。如果函数中的arg是1,则得到 返回2+兔耳(1-1);哪个CAL返回(0)并返回0 所以你得到了2+0的回报;你的输出是2
简单递归 尝试扩展呼叫链。例如,如果调用
bunnyEars(1)
,则return
语句的计算结果为:
2 + bunnyEars(1 - 1)
= 2 + bunnyEars(0)
= 2 + 0
= 2
类似地,对于兔耳(2)
:
当数字1被传递给递归时,递归工作的原因是因为您正在返回
2 + bunnyEars(bunnies - 1)
即使兔子的数量是0。通过在else条件中包装第二个返回,您将在传入bunnyEars(1)时获得返回0的预期结果
像这样:
public int bunnyEars(int bunnies) {
if(bunnies == 0) {
return 0;
} else {
return 2 + bunnyEars(bunnies - 1);
}
}
当我用else语句看它时,它完全有意义。
public int bunnyEars(int bunnies) {
if(bunnies == 0) {
return 0;
} else {
return 2 + bunnyEars(bunnies - 1);
}
}