当前位置:首页 > JavaScript

js递归实现fnah

2026-02-02 18:54:20JavaScript

递归实现斐波那契数列(Fibonacci)的方法

递归是一种通过函数调用自身来解决问题的方法。斐波那契数列是一个经典的递归案例,其定义如下:

  • F(0) = 0
  • F(1) = 1
  • F(n) = F(n-1) + F(n-2) (n ≥ 2)

基础递归实现

function fibonacci(n) {
    if (n <= 1) return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

这种方法简单直观,但效率较低,因为会重复计算许多子问题。例如,计算 fibonacci(5) 时会多次计算 fibonacci(2)

优化递归(带记忆化)

通过存储已计算的结果避免重复计算,可以显著提高性能。

function fibonacciMemo(n, memo = {}) {
    if (n <= 1) return n;
    if (memo[n]) return memo[n];
    memo[n] = fibonacciMemo(n - 1, memo) + fibonacciMemo(n - 2, memo);
    return memo[n];
}

memo 对象用于缓存已计算的值,减少重复调用。

尾递归优化

某些 JavaScript 引擎支持尾递归优化(TCO),可以避免栈溢出问题。

function fibonacciTail(n, a = 0, b = 1) {
    if (n === 0) return a;
    if (n === 1) return b;
    return fibonacciTail(n - 1, b, a + b);
}

尾递归通过将中间结果传递给下一次调用,减少栈空间的使用。

注意事项

  • 基础递归的时间复杂度为 O(2^n),记忆化优化后为 O(n)。
  • 对于较大的 n(如 n > 50),基础递归可能导致栈溢出或性能问题,建议使用记忆化或迭代方法。
  • 递归代码更简洁,但迭代(循环)实现通常性能更好。

js递归实现fnah

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

相关文章

js 实现vue模板

js 实现vue模板

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

js实现动画

js实现动画

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

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #34…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组…