递归实现数组求和的代码错误排查求助
问题分析:你的递归求和代码陷入了无限递归
让我们一步步拆解你的代码问题:
首先看你的递归逻辑:
function arraySum(arr, index) { if (arr.length <= index) return 0; return (arraySum(arr, arr.length - 1) + arr[arr.length - 1]); }
当你调用arraySum(yourArray, 0)时,问题立刻就出现了:
- 第一次调用时,
index=0,满足0 < 8(数组长度),所以会执行递归调用arraySum(arr, 7)(因为arr.length-1=7) - 接下来的递归调用里,
index=7,依然满足7 <8,于是又会调用arraySum(arr,7)——这里没有任何变化! - 这个过程会无限重复下去,永远触发不了
arr.length <= index的终止条件(毕竟8永远不会小于等于7),最终会导致栈溢出错误(Stack Overflow)
核心问题总结
你没有让递归的index参数逐步向终止条件靠近,反而每次都固定传入数组最后一个元素的索引,导致递归无法收敛。
修正后的递归实现
正确的思路应该是从当前index的元素开始,累加后递归处理下一个索引(index+1),直到index等于数组长度时返回0:
function arraySum(arr, index) { // 当index超出数组长度时,没有元素可以累加,返回0 if (arr.length <= index) return 0; // 累加当前index的元素,再递归处理下一个索引 return arr[index] + arraySum(arr, index + 1); }
调用方式还是arraySum(yourArray, 0),这样递归会依次处理索引0→1→2→…→8,当index=8时触发终止条件,然后从最底层开始累加所有元素,得到正确的总和。
额外优化(可选)
如果不想每次调用都手动传index=0,可以给index设置默认值:
function arraySum(arr, index = 0) { if (arr.length <= index) return 0; return arr[index] + arraySum(arr, index + 1); } // 调用时直接传数组即可 const total = arraySum([1,2,3,4,5,6,7,8]);
内容的提问来源于stack exchange,提问作者EverProgrammer
相关产品推荐
相关产品推荐

