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

为何C#中计算93的斐波那契数结果为负数?

斐波那契数出现负数的原因

核心问题:64位有符号整数溢出

你使用的long类型是.NET中的64位有符号整数,它的取值上限是9223372036854775807。第93个斐波那契数的实际值是12200160415121876738,这个数值远超long的最大值,直接导致了整数溢出。

溢出后的环绕行为

计算机用二进制补码存储有符号整数,当数值超出范围时,会自动执行模运算环绕——原本的正数溢出后,最高位会被识别为符号位,结果就变成了负数。你得到的-6246583658587674878就是溢出后环绕的结果。

代码判断逻辑的漏洞

你循环里的if(fib(i) > long.MaxValue)完全起不到终止作用:因为fib(i)的返回值是long类型,溢出后已经变成负数,永远不可能大于long.MaxValue,所以循环会继续执行,直到输出溢出后的错误数值。

你的代码(修正转义符号后)

long fib(long x){
    long a = 1;
    long b = 0;
    long c = 0;

    for(int i = 0; i <= x-1; i++) {
        c=a+b;
        a=b;
        b=c;
    }

    return c;
}

for(int i = 0; i < 420; i++) {
    if(fib(i) > long.MaxValue) break;
    Console.WriteLine($"fibonacci of {i} is {fib(i)}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:58:07