【发布时间】:2019-02-09 17:28:26
【问题描述】:
问题:
在这个问题中,我们正在评估的场景如下:您站在楼梯的底部,并且正在前往顶部。小步走上一级台阶,大步走两级。您想根据大小步幅的不同组合计算爬上整个楼梯的方式的数量。例如,三级楼梯可以通过三种不同的方式爬上:三小步、一小步后一大步或一大步后一小步。
waysToClimb(3) 的调用应该产生以下输出:
1 1 1,
1 2,
2 1
我的代码:
public static void waysToClimb(int n){
if(n == 0)
System.out.print("");
else if(n == 1)
System.out.print("1");
else {
System.out.print("1 ");
waysToClimb(n - 1);
System.out.print(",");
System.out.print("2 ");
waysToClimb(n - 2);
}
}
我的输出:
1 1 1,
2,
2 1
我的递归似乎不记得它采取的路径知道如何修复它?
编辑:
谢谢大家的回复。抱歉回复晚了
我想通了
public static void waysToClimb(int n){
String s ="[";
int p=0;
com(s,p,n);
}
public static void com(String s,int p,int n){
if(n==0 && p==2)
System.out.print(s.substring(0,s.length()-2)+"]");
else if(n==0 && p !=0)
System.out.print(s+"");
else if(n==0 && p==0)
System.out.print("");
else if(n==1)
System.out.print(s+"1]");
else {
com(s+"1, ",1,n-1);
System.out.println();
com(s+"2, ",2,n-2);
}
}
【问题讨论】:
-
问题指出您应该计算不同方式的数量,而不是打印它们。哪个是预期的输出?
-
你不计算(总结步数) - 每次调用waysToClimb 都会将可能的步数加 1,除非你还剩 0 步。你把增量放在哪里只是你必须做出的决定(你只需要注意不要计算两次)。
-
当心下面的答案并没有很好地涵盖问题的核心(循环语义或者如果你知道的话还有一个数学解决方案)
标签: java depth-first-search backtracking