当前位置:首页 > 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);
}

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

js递归实现fnah

注意事项

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

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

相关文章

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…