当前位置:首页 > JavaScript

js递归实现

2026-03-15 06:12:44JavaScript

递归的基本概念

递归是一种在函数内部调用自身的编程技术。它通常用于解决可以分解为相似子问题的问题,例如树遍历、阶乘计算等。递归函数必须包含基线条件(终止条件),否则会导致无限循环。

递归实现阶乘

阶乘是经典的递归示例。n的阶乘(n!)定义为n乘以(n-1)的阶乘,直到1。

function factorial(n) {
  if (n === 1) return 1; // 基线条件
  return n * factorial(n - 1); // 递归调用
}
console.log(factorial(5)); // 输出: 120

递归实现斐波那契数列

斐波那契数列中每个数字是前两个数字之和,通常以0和1开始。

js递归实现

function fibonacci(n) {
  if (n <= 1) return n; // 基线条件
  return fibonacci(n - 1) + fibonacci(n - 2); // 递归调用
}
console.log(fibonacci(10)); // 输出: 55

递归实现数组求和

递归可以用于遍历数组并计算总和。

function sumArray(arr, index = 0) {
  if (index === arr.length) return 0; // 基线条件
  return arr[index] + sumArray(arr, index + 1); // 递归调用
}
console.log(sumArray([1, 2, 3, 4])); // 输出: 10

递归实现深拷贝

递归可以用于创建对象的深拷贝,处理嵌套结构。

js递归实现

function deepCopy(obj) {
  if (typeof obj !== 'object' || obj === null) return obj; // 基线条件
  const copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    copy[key] = deepCopy(obj[key]); // 递归调用
  }
  return copy;
}
const original = { a: 1, b: { c: 2 } };
const copied = deepCopy(original);
console.log(copied); // 输出: { a: 1, b: { c: 2 } }

递归的注意事项

递归可能导致栈溢出,尤其是处理大规模数据时。尾递归优化可以缓解这个问题,但并非所有JavaScript引擎都支持。

递归代码通常简洁但可能难以调试。确保基线条件正确,避免无限递归。

对于性能敏感的场景,考虑使用迭代替代递归。

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

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…