需要帮助理解基本的递归问题

Need help understanding basic recursion problem

我刚开始练习递归我有一个非常简单的练习程序问题。

有兔子排成一排,编号为1,2,3...奇数兔子(1,2,3..)有正常的2只耳朵。

偶数兔子 (2,4,6...) 有 3 个耳朵,因为它们每只都有一个凸起的脚。递归 return 兔子线中耳朵的数量。

我有办法。但是,我对某些事情有点困惑。首先,据我了解,每只偶数编号的兔子都有 3 英尺。所以 bunnyEars2(2) 应该产生 6 个而不是 5 个?

此外,我注意到我是否删除了某些复杂的内容,例如“(bunnyEars2(bunnies)”,而不是在末尾添加“-1”。我在 bunnyEarsTwo.bunnyEars2(bunnyEarsTwo.java:13).

非常感谢对此问题和一般递归的任何解释和分解。立志要学,就是要被人指点方向!

 public static int bunnyEars2(int bunnies){
    if(bunnies==0) return 0;
    return (bunnies % 2 == 0) ? (3+bunnyEars2(bunnies-1)) : (2+bunnyEars2(bunnies-1));
}

我希望你通过递归了解阶乘。因为这很相似。

int factorial(int n){    
  if (n == 0)    
    return 1;    
  else    
    return(n * factorial(n-1));    
 }   

我们在这里 returning `n * n-1 * n-1-1 * n-1-1-1 等等,直到 n-1.... 为 0。
同样,

public static int bunnyEars2(int bunnies){
    if(bunnies==0) 
        return 0;
    if (bunnies % 2 == 0)
        return  3+bunnyEars2(bunnies-1);
    else 
        return  2+bunnyEars2(bunnies-1);
}

在这里,遵循相同的逻辑,但不同之处在于,
当它偶数时,它 return 3 + bunnyEars2(bunnies-1)
当它是奇数时,它 return 2 + bunnyEars2(bunnies-1)
例如:bunnyEars2(4)10
这里我们的兔子值将是 4,3,2,1,0
因为 4 是偶数 it returns 3+, 3 是奇数 it returns 2+, 2 returns 3+, 1 returns 2+ 和 0 returns 0
3 + 2 + 3 + 2 + 0 = 10.
bunnyEars2(2) 将是 5,这里的兔子值将是 2,1,0 其中 returns 3 + 2 + 0 = 5
此外,从 bunnyEars2(bunnies-1) 中删除 -1 将导致无限递归(堆栈溢出错误)。就像把n * factorial(n)去掉-1一样,不会结束