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

递归实现数组求和的代码错误排查求助

问题分析:你的递归求和代码陷入了无限递归

让我们一步步拆解你的代码问题:

首先看你的递归逻辑:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:52:34