js递归实现求和
递归求和的基本原理
递归是一种通过函数调用自身来解决问题的方法。在求和场景中,递归通过不断将问题分解为更小的子问题(如数组前n-1项的和加上第n项),直到达到基线条件(如空数组或单元素数组)终止递归。
简单数组求和实现
以下代码展示如何用递归计算数组所有元素的和:

function sum(arr) {
if (arr.length === 0) return 0; // 基线条件
return arr[0] + sum(arr.slice(1)); // 递归调用
}
当输入[1,2,3]时,执行过程为:
- 1 + sum([2,3])
- 1 + (2 + sum([3]))
- 1 + (2 + (3 + sum([])))
- 1 + (2 + (3 + 0)) = 6
带索引参数的优化版本
为避免频繁创建新数组,可通过传递索引参数优化性能:

function sum(arr, index = 0) {
if (index >= arr.length) return 0;
return arr[index] + sum(arr, index + 1);
}
尾递归优化实现
ES6支持的尾递归优化可避免调用栈溢出:
function sum(arr, accumulator = 0) {
if (arr.length === 0) return accumulator;
return sum(arr.slice(1), accumulator + arr[0]);
}
多维数组求和扩展
处理嵌套数组时需增加类型判断:
function deepSum(arr) {
return arr.reduce((acc, val) =>
acc + (Array.isArray(val) ? deepSum(val) : val), 0);
}
注意事项
- 递归深度过大可能导致堆栈溢出,可用尾递归或迭代替代
- 对于大型数据集,循环通常比递归性能更好
- 基线条件必须能够最终被满足,否则会导致无限递归






