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

递归与非递归Fibonacci函数结果不一致问题求助

斐波那契计算器结果不一致问题排查

你的递归版本代码是正确的,问题出在非递归版本的循环逻辑上,导致它返回的是F(n+1)而非F(n)。

正确的斐波那契数列值参考

按标准定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2),因此F(7)的正确结果是13——你的递归版FibRec(7)返回13是对的,非递归版Fib(7)返回的21实际是F(8)的值。

非递归代码的问题分析

看你非递归代码里的循环条件:

for (int i = 0; i <= n-1; i++)

当n=7时,循环会执行7次(i从0到6),但从F(0)和F(1)推导到F(7)只需要6次迭代:

  • 第1次迭代:得到F(2)=1
  • 第2次迭代:得到F(3)=2
  • ...
  • 第6次迭代:得到F(7)=13
  • 第7次迭代:额外计算出F(8)=21,这就是你得到的错误结果

修复后的非递归代码

以下两种方式都能解决问题,选一种即可:

方式1:修改循环条件

public static int Fib(int n)
{
    if (n == 0) { return 0; }
    if(n == 1) { return 1; }
    int a = 0;
    int b = 1;
    int res = 0;
    // 循环次数调整为n-2次,避免多算一次
    for (int i = 0; i < n-1; i++)
    {
        res = a + b;
        a = b;
        b = res;
    }
    return res;
}

方式2:更直观的循环逻辑

从i=2开始循环到n,直接计算对应位置的斐波那契数,逻辑更清晰:

public static int Fib(int n)
{
    if (n == 0) { return 0; }
    if(n == 1) { return 1; }
    int a = 0;
    int b = 1;
    for (int i = 2; i <= n; i++)
    {
        int temp = a + b;
        a = b;
        b = temp;
    }
    return b;
}

验证结果

修复后调用Fib(7)会返回正确的13,和递归版本结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:32:33