JavaScript 实现斐波那契数列的五种常见方式
本文总结 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 实现斐波那契数列的五种方式。如需了解更多相关内容,可参考本站往期文章或继续浏览后续教程,感谢支持。
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
