我是董事会的新手,我为作为一个完整的菜鸟而道歉,我只是想绕过这个递归方法的逻辑。我也在董事会上搜索了这个问题并发现了类似但没有回答我的问题。
public int bunnyEars(int bunnies) {
if(bunnies == 0) return 0;
return 2 + bunnyEars(bunnies - 1);
}
我知道这可以编译并运行。但是我不清楚递归调用,其中1是从过去的兔子数中减去的..更确切地说,如何将数字1作为参数传递给bunnyEars(1)并仍然得到正确的答案2没有被减去并等于0,因此退出方法。
答案 0 :(得分:1)
尝试扩展调用链。例如,如果您调用bunnyEars(1)
,则return
语句的计算结果为:
2 + bunnyEars(1 - 1)
= 2 + bunnyEars(0)
= 2 + 0
= 2
同样,bunnyEars(2)
:
2 + bunnyEars(2 - 1)
= 2 + bunnyEars(1)
= 2 + 2 + bunnyEars(1 - 1)
= 2 + 2 + bunnyEars(0)
= 2 + 2 + 0
= 4
答案 1 :(得分:0)
如果您的函数中的arg为1,则
返回2 + bunnyEars(1 - 1);哪个cals bummyEars(0)并返回0 所以你得到2 + 0;你的输出是2。
简单的递归。
答案 2 :(得分:0)
将数字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);
}
}