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