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) + 3sumAll(2)→ 调用sumAll(1) + 2sumAll(1)→ 返回1- 回溯计算:1 + 2 = 3,再加3得到6,符合预期。
如果是处理正整数场景,还可以简化条件判断:
function sumAll(n) { return n <= 1 ? 1 : sumAll(n - 1) + n; }
内容的提问来源于stack exchange,提问作者alex the listener
相关产品推荐
相关产品推荐

