You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现闭区间求和时出现无限循环及运行时错误求助

嘿,我来帮你揪出这个求和函数的问题!

先看你写的代码:

int sum(int m, int n) {
    if (m != n) {
        return m + sum(m++, n);
    }
    return n;
}

你本来想计算闭区间[m,n]的和,比如sum(2,5)要返回2+3+4+5=14,结果却陷入无限循环还触发运行时错误,问题全出在sum(m++, n)这一行!

问题核心:后置自增的坑

m++是后置自增运算符,它的执行逻辑是:先把当前m的原始值传递给递归函数,然后再给m加1。这就导致每次递归调用时,传给下一层的m和当前层的m完全一样,永远满足m != n的条件,递归根本停不下来,最终栈内存被耗尽,触发运行时错误。

两种简单的修复方案

方案一:改用前置自增++m

前置自增会先把m加1,再把新值传递给递归函数,这样每次递归的m都会逐步向n靠近,直到触发终止条件:

int sum(int m, int n) {
    if (m != n) {
        return m + sum(++m, n);
    }
    return n;
}

方案二:直接传递m + 1(更推荐)

这种方式完全避开自增运算符的陷阱,逻辑更直观,不容易出错:

int sum(int m, int n) {
    if (m != n) {
        return m + sum(m + 1, n);
    }
    return n;
}

测试sum(2,5),这两个版本都能正确返回14,完美实现你的需求。

额外小建议

如果只是计算闭区间的和,其实用数学公式(m + n) * (n - m + 1) / 2效率更高,递归虽然直观,但如果n和m差距很大,还是可能出现栈溢出的问题,公式法就没这个顾虑啦~

内容的提问来源于stack exchange,提问作者pango322

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:22:01