我目前是一个学习递归的新手程序员,但我不明白为什么我的代码无法正常工作。我必须编写一个名为WaysToClimb的递归方法,该方法输出用于爬升n个步骤的不同方法。您可以1个步长爬1或2步。这是我到目前为止的内容:
public void waysToClimb(int n) {
if (n == 0) {
//base case, makes a new line for the next series of steps
System.out.println();
}
if (n >= 1) {
//1 step, prints 1 and subtracts 1 from n
System.out.print("1 ");
waysToClimb(n - 1);
}
if (n >= 2) {
//2 steps, prints 2 and subtracts 2 from n
System.out.print("2 ");
waysToClimb(n - 2);
}
}
我的问题是,当步数大于2时,当
n >= 2
的if语句仅输出2,而没有其他数字。例如,caseTosClimb(3)打印出来的情况:1 1 1
2 (should be 1 2)
2 1
为什么不打印出1 2?我的if语句不应该打印出所有可能的组合,因为代码被强制检查每一个
最佳答案
标记代码并逐步执行:
public void waysToClimb(int n) {
// #1
if (n == 0) {
//base case, makes a new line for the next series of steps
System.out.println();
}
// #2
if (n >= 1) {
//1 step, prints 1 and subtracts 1 from n
System.out.print("1 ");
waysToClimb(n - 1);
}
// #3
if (n >= 2) {
//2 steps, prints 2 and subtracts 2 from n
System.out.print("2 ");
waysToClimb(n - 2);
}
}
现在,您的代码将逐步执行以下操作:
Call: IF: Print: Function call:
waysToClimb(3) #2 1 waysToClimb(2)
waysToClimb(2) #2 1 waysToClimb(1)
waysToClimb(1) #2 1 waysToClimb(0)
waysToClimb(0) #1 \n return
waysToClimb(2) #3 2 waysToClimb(0)
waysToClimb(0) #1 \n return
waysToClimb(3) #3 2 waysToClimb(1)
waysToClimb(1) #2 1 waysToClimb(0)
waysToClimb(0) #1 \n return
因此输出为:
1 1 1
2
2 1
您应该做什么:
public void waysToClimb(int n, String s) {
if (n == 0) {
System.out.println(s);
}
if (n >= 1) {
waysToClimb(n - 1, s + "1 ");
}
if (n >= 2) {
waysToClimb(n - 2, s + "2 ");
}
}
调用该函数:
waysToClimb(3, "");
关于java - 为什么递归代码没有调用所有情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32086323/