当前位置:首页 > JavaScript

js递归实现求和

2026-01-30 22:45:36JavaScript

递归求和的基本原理

递归是一种通过函数调用自身来解决问题的方法。在求和场景中,递归通过不断将问题分解为更小的子问题(如数组前n-1项的和加上第n项),直到达到基线条件(如空数组或单元素数组)终止递归。

简单数组求和实现

以下代码展示如何用递归计算数组所有元素的和:

function sum(arr) {
  if (arr.length === 0) return 0; // 基线条件
  return arr[0] + sum(arr.slice(1)); // 递归调用
}

当输入[1,2,3]时,执行过程为:

  1. 1 + sum([2,3])
  2. 1 + (2 + sum([3]))
  3. 1 + (2 + (3 + sum([])))
  4. 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]);
}

多维数组求和扩展

处理嵌套数组时需增加类型判断:

js递归实现求和

function deepSum(arr) {
  return arr.reduce((acc, val) => 
    acc + (Array.isArray(val) ? deepSum(val) : val), 0);
}

注意事项

  • 递归深度过大可能导致堆栈溢出,可用尾递归或迭代替代
  • 对于大型数据集,循环通常比递归性能更好
  • 基线条件必须能够最终被满足,否则会导致无限递归

标签: 递归js
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…