首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >步长大于3时Staircase问题中的Stackoverflow误差

步长大于3时Staircase问题中的Stackoverflow误差
EN

Stack Overflow用户
提问于 2021-01-17 21:04:17
回答 2查看 65关注 0票数 0

我试图用一种获取楼梯数(n)和最大步长(maxStep)的方法来解决java中的楼梯问题。不知何故,它一直工作到步骤大小>3之后,我得到了一个堆栈溢出错误,但我不知道为什么是这样。

代码语言:javascript
运行
复制
    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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-17 21:35:55

尝试这段代码,希望它能工作。

代码语言:javascript
运行
复制
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;
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2021-01-17 21:10:07

您不检查maxstep是否小于步骤计数。这意味着过一段时间后,i<=maxstep可以是> n,这将导致下一次递归出现负n。如果它一旦转向负面,它就会无限地回溯。要修复它,只需检查n<=maxstep或n<=0。

“坏”代码示例:尝试输入5,4:它将使用n=启动该方法

  • 5
  • 4
  • 3
  • -1
  • -2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65765921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档