当前位置:首页 > JavaScript

js递归实现求和

2026-01-30 22:45:36JavaScript

递归求和的基本原理

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

简单数组求和实现

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

js递归实现求和

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

带索引参数的优化版本

为避免频繁创建新数组,可通过传递索引参数优化性能:

js递归实现求和

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);
}

注意事项

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

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

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…