需要帮助理解基本的递归问题
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
一样,不会结束
我刚开始练习递归我有一个非常简单的练习程序问题。
有兔子排成一排,编号为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
一样,不会结束