You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript递归实现Fibonacci数列为何陷入无限循环?

斐波那契函数无限循环问题分析

先看你写的代码:

function fibbi(number) {
    for (let number = 0; number < 10; number++) {
        console.log(fibbi(number));
    }if (number < 2) {
        return number;
    } else {
        return fibbi(number - 1) + fibbi(number - 2);
    }
}
fibbi(10);

无限循环的原因

  • 局部变量覆盖入参:函数内部的for循环里用let number = 0重新声明了同名局部变量,直接覆盖了函数的入参number。
  • 无限递归触发:当调用fibbi(10)时,函数先执行这个for循环,循环变量从0开始,第一次就调用fibbi(0);而fibbi(0)执行时,又会先跑这个for循环,再次调用fibbi(0)——相当于每次调用fibbi都会无限套娃调用fibbi(0),永远到不了后面的终止判断if (number < 2),自然陷入无限循环。

为什么把for循环放外面就没问题

把for循环移到函数外后,fibbi函数只负责计算斐波那契值:

  • 调用fibbi(n)时会直接执行终止条件判断,当n < 2时直接返回n,递归会正常收敛,不会出现无限调用的情况。

修正后的示例代码

// 专门计算斐波那契值的函数
function fibbi(number) {
    if (number < 2) {
        return number;
    } else {
        return fibbi(number - 1) + fibbi(number - 2);
    }
}

// 外部循环调用并输出结果
for (let i = 0; i < 10; i++) {
    console.log(fibbi(i));
}

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:24:19