java - 递归给出意外/错误的输出?

标签 java recursion

所以我在 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/

相关文章:

java - webapp 中的异常,即org.apache.jasper.JasperException

c - C 中的一些递归、字符数组和 strcpy

algorithm - 最小和使得每三个连续元素中的一个被取

sql - 使用一个查询 SQLite 选择所有递归值

python - 递归闭包(函数发生器)

java - 无法将 JSON 反序列化为 POJO

java - 在预检中 Access-Control-Allow-Methods 不允许方法 PATCH

java - 从结果集对象中检索元素

java - Java 中的 GAE 数据存储 + JPA + Odata

java - 列出目录(包括子目录)中所有文件的最有效方法是什么?