当前位置:首页 > JavaScript

js中递归实现

2026-03-15 19:07:09JavaScript

递归的基本概念

递归是一种函数调用自身的技术,通常用于解决可以分解为相似子问题的情况。在JavaScript中,递归函数需要定义基本情况(终止条件)和递归情况(调用自身)。

递归实现阶乘

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

function factorial(n) {
    if (n === 0 || n === 1) { // 基本情况
        return 1;
    }
    return n * factorial(n - 1); // 递归情况
}
console.log(factorial(5)); // 输出: 120

递归实现斐波那契数列

斐波那契数列中每个数字是前两个数字之和(如:0, 1, 1, 2, 3, 5...)。

function fibonacci(n) {
    if (n <= 1) { // 基本情况
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2); // 递归情况
}
console.log(fibonacci(6)); // 输出: 8

递归实现数组求和

递归可用于遍历数组或列表结构,逐层分解问题。

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

递归的注意事项

递归可能导致堆栈溢出(如未定义终止条件或递归过深)。对于复杂问题,尾递归优化或改用循环可能更高效。

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

相关文章

vue实现递归

vue实现递归

Vue 实现递归组件的方法 递归组件在 Vue 中通常用于处理树形结构数据(如菜单、评论嵌套等)。以下是实现递归组件的核心方法: 1. 组件自引用 在 Vue 中,组件可以通过 name 选项引用自…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…