我试图用一种获取楼梯数(n)和最大步长(maxStep)的方法来解决java中的楼梯问题。不知何故,它一直工作到步骤大小>3之后,我得到了一个堆栈溢出错误,但我不知道为什么是这样。
public static int climbStairs(int n, int maxStep) {
if (n == 0 || n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else {
int count = 0;
for (int i = 1; i <= maxStep; i++) {
count += climbStairs(n - i, maxStep);
}
return count;
}
}
发布于 2021-01-17 21:35:55
尝试这段代码,希望它能工作。
public static int climbStairs2(int n, int maxStep) {
if (n == 0 || n == 1) {
return 1;
} else if (n < maxStep) {
return n;
} else {
int count = 0;
for (int i = 1; i <= maxStep; i++) {
count += climbStairs2(n - i, maxStep);
}
return count;
}
}
发布于 2021-01-17 21:10:07
您不检查maxstep是否小于步骤计数。这意味着过一段时间后,i<=maxstep可以是> n,这将导致下一次递归出现负n。如果它一旦转向负面,它就会无限地回溯。要修复它,只需检查n<=maxstep或n<=0。
“坏”代码示例:尝试输入5,4:它将使用n=启动该方法
https://stackoverflow.com/questions/65765921
复制相似问题