JavaScript 实现斐波那契数列的五种常见方式

作者:木棉

时间:2026-10-23

浏览:299

本文总结 JavaScript 中实现斐波那契数列的五种核心方法。涵盖基础循环、普通递归、尾递归、基于闭包的记忆化缓存以及 Generator 函数配合 for...of 循环的实现。通过对比不同方案的代码结构与性能特征,帮助开发者根据实际需求选择最优算法。

文章目录

JavaScript 实现斐波那契数列的五种方式

本文汇总了 JavaScript 中实现斐波那契数列的五种主要技术手段。

循环实现

第一种方式是使用循环结构。该方法通过迭代计算后续项,避免递归带来的栈溢出风险,适合对性能有较高要求的场景。


function fibonacci(n){
 var res1 = 1;
 var res2 = 1;
 var sum = res2;
 for(var i = 1;i < n;i ++){
   sum = res1 + res2;
   res1 = res2;
   res2 = sum;
 }
 return sum;
}

普通递归

第二种方式是采用普通递归。虽然代码逻辑直观,对应数学定义,但由于存在大量重复计算,其时间复杂度较高,通常仅用于演示递归思想。


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

尾递归与生成器

第三种方式是尾递归优化。通过传递累加参数,将递归调用置于函数末尾,部分引擎可对其进行优化,从而减少栈内存消耗。此外,还可以利用 Generator 函数结合 for...of 循环来惰性生成数列,这种方式在需要按需获取数值时非常高效。


function fibonacci(n, ac1=1,ac2=1){
  if(n<=1){return ac2}
 return fibonacci(n-1, ac2, ac1 + ac2)
}
Generator 函数和for...of循环
// Generator 函数和for...of循环
function* fibonacci() {
 let [prev, curr] = [0, 1];
  // foo(;;)相当于死循环 等于while(1)
 for (;;) {
  yield curr;
  [prev, curr] = [curr, prev + curr];
 }
}
for (let n of fibonacci()) {
 if (n > 1000) break;
 console.log(n);
}

闭包记忆化

第四种方式是利用闭包实现记忆化(Memoization)。通过内部缓存数组存储已计算的结果,避免重复运算,显著提升多次调用时的执行效率。


const fibonacci = function(){
  var mem = [0,1];
  var f = function(n){
    var res = mem[n];
    if(typeof res !== 'number'){
      mem[n] = f(n-1) + f(n-2);
      res = mem[n];
    }
    return res;
  }
  return f;
}();

以上介绍了 JavaScript 实现斐波那契数列的五种方式。如需了解更多相关内容,可参考本站往期文章或继续浏览后续教程,感谢支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章