所以我在 codingbat 上进行递归挑战并遇到了“兔子耳朵”问题,我们有很多兔子,每个兔子都有两个松软的大耳朵。我们想要递归地计算所有兔子的耳朵总数(没有循环或乘法)。
解决方案显然非常简单:
public int bunnyEars(int bunnies)
{
if(bunnies == 0)
return 0;
return 2+bunnyEars(bunnies-1);
}
但是我无法理解。如果我们在 bunnyEars(2) 方法中传递 2
递归部分 bunnyEars(bunnys-1);减法后括号中应剩下 1,因此为 2+(1);它应该等于 3 而不是 4。
但输出为 4。那么递归在这段代码中实际上是如何工作的呢?
最佳答案
不是 2+(1),而是 2+numberOfEarsOfBunnies(1) == 2+2。
我稍微重命名了该函数以使其更加明显。
或者更详细:
兔子耳朵数(2)==
2+兔子耳朵数量(1)==
2+(2+兔子耳朵数量(0))==
2+(2+0)==
2+2==
4
关于java - 递归给出意外/错误的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774351/