理解这个递归调用中的逻辑

时间:2014-12-15 04:23:27

标签: recursion

我是董事会的新手,我为作为一个完整的菜鸟而道歉,我只是想绕过这个递归方法的逻辑。我也在董事会上搜索了这个问题并发现了类似但没有回答我的问题。

public int bunnyEars(int bunnies) {

  if(bunnies == 0) return 0;

  return 2 + bunnyEars(bunnies - 1);
}

我知道这可以编译并运行。但是我不清楚递归调用,其中1是从过去的兔子数中减去的..更确切地说,如何将数字1作为参数传递给bunnyEars(1)并仍然得到正确的答案2没有被减去并等于0,因此退出方法。

3 个答案:

答案 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);
    }
}