当前位置:首页 > JavaScript

js中递归实现

2026-03-15 19:07:09JavaScript

递归的基本概念

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

递归实现阶乘

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

js中递归实现

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...)。

js中递归实现

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

递归实现深度拷贝

递归适合处理嵌套对象或数组的深度拷贝。

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
分享给朋友:

相关文章

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现导航菜单

js实现导航菜单

使用HTML和CSS创建基础结构 导航菜单的基础结构通常由HTML的无序列表(<ul>)和列表项(<li>)组成,每个列表项包含一个链接(<a>)。CSS用于样式化…

js实现点击效果

js实现点击效果

实现点击效果的JavaScript方法 使用addEventListener绑定点击事件 通过document.getElementById或document.querySelector获取DOM元素…

js实现div隐藏

js实现div隐藏

使用CSS的display属性隐藏div 通过设置元素的display属性为none,可以完全隐藏div元素。这种方法不仅隐藏元素,还会从文档流中移除,不占据页面空间。 document.getEl…