当前位置:首页 > 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 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

vue实现递归

vue实现递归

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

php实现递归

php实现递归

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…