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

使用递归在JavaScript中实现整数数组求和

解决整数数组递归求和的问题

首先,咱们来拆解下你当前代码里的几个核心问题:

  • 每次调用sumOfInts时,counter和result都会被重新初始化为0,之前的累加状态根本没法保留,这完全违背了递归的思路(递归是通过函数自身调用传递状态,不是靠函数内部的局部变量)
  • else分支里既没有返回值,也没有正确触发递归调用,导致函数执行到这里就直接结束了,自然不会输出任何结果
  • 基线条件(递归的终止条件)写得不对,counter === array.length - 2这个判断太局限,没法覆盖数组为空、只有一个元素等情况

递归的核心逻辑其实很简单:把大问题拆成更小的子问题,直到子问题小到可以直接解决(基线条件)。针对数组求和,咱们可以这么梳理:

  • 基线条件:如果数组为空,直接返回0;如果数组只有一个元素,返回这个元素本身
  • 递归条件:数组的总和 = 第一个元素的值 + 剩余所有元素的总和(剩余元素的总和就交给递归调用去解决)

基于这个思路,我们可以写出简洁正确的递归实现:

function sumOfInts(array) {
  // 基线条件:空数组的和为0
  if (array.length === 0) {
    return 0;
  }
  // 递归:取第一个元素,加上剩余数组的求和结果
  return array[0] + sumOfInts(array.slice(1));
}

// 测试调用
console.log(sumOfInts([1,2,3,4])); // 输出10

如果你更倾向于用类似"索引遍历"的方式(避免每次调用都创建新数组切片),可以通过传递索引参数来实现:

function sumOfInts(array, index = 0) {
  // 基线条件:索引超出数组范围,返回0
  if (index >= array.length) {
    return 0;
  }
  // 递归:当前元素的值 + 后续元素的求和结果
  return array[index] + sumOfInts(array, index + 1);
}

console.log(sumOfInts([1,2,3,4])); // 输出10

再回头看你尝试的递归调用,之所以没成功,是因为你在else里只修改了局部变量,却没有把递归调用的结果返回,而且每次调用函数都会重置counter和result,状态根本传不下去。如果一定要基于你的原始代码修改,需要把这两个变量作为参数传递,但这种写法会冗余很多,不如上面两种思路清晰。

最后再划个重点:写递归一定要记住三个点——明确的基线条件、每次解决更小的子问题、正确返回递归调用的结果,缺一不可哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:47:34