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

JS递归求和函数报错求助:实现1到n求和出现异常

递归求和函数的问题分析与修复

问题根源

你的代码里用了sumAll(n--) + n,这里的n--是后置递减运算符,执行逻辑是先返回n的当前值,再将n减1。调用sumAll(3)时,第一次进入分支会执行sumAll(3) + 3,等于重复调用自身,无限循环下去最终触发栈溢出错误。

修复后的代码

把n--改成n-1即可,n-1直接传递当前值减1后的结果,不会引发无限递归:

function sumAll(n) {
  if (n == 1 ) {
    return 1;
  } else if (n > 1) {
    return sumAll(n - 1) + n;
  }
}

console.log(sumAll(3)); // 输出6

递归逻辑验证

调用sumAll(3)的执行流程:

  • sumAll(3) → 调用sumAll(2) + 3
  • sumAll(2) → 调用sumAll(1) + 2
  • sumAll(1) → 返回1
  • 回溯计算:1 + 2 = 3,再加3得到6,符合预期。

如果是处理正整数场景,还可以简化条件判断:

function sumAll(n) {
  return n <= 1 ? 1 : sumAll(n - 1) + n;
}

内容的提问来源于stack exchange,提问作者alex the listener

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:46:00