0

我创建了一种迭代计算斐波那契数的方法(我不允许使用递归)。在索引 47 之后,我得到奇怪的结果:

斐波那契数 47:-1323752223
斐波那契数 48:512559680
斐波那契数 49:-811192543
斐波那契数 50:-298632863

我尝试了不同的方法,但它改变了整个事情。这是我的方法,有什么想法吗?希望您能够帮助我。

public static long fiboIterative(int n) {

    if (n == 0)
        return 0;
    if (n == 1 || n == 2)
        return 1;

    int previous = -1;
    int result = 1;

    for (int i = 0; i <= n; i++) {

        int sum = result + previous;
        previous = result;
        result = sum;
    }

    return result;
    }

}

4

3 回答 3

8

您已经溢出了int用于存储当前斐波那契数的值。可以存储在不溢出的最大值int是略高于 20 亿。 Integer.MAX_VALUE2147483647。您可以使用更大的数据类型,例如long, for sum,previousresult, 来打印更多结果。然而,它最终也会溢出。 Long.MAX_VALUE9223372036854775807,略高于 9 quintillion。

于 2013-11-01T20:42:44.553 回答
4

您遇到了整数溢出:Java 的int类型可以表示介于 -2,147,483,648 和 2,147,483,647 之间的数字。第 47 个斐波那契数是 2,971,215,073。

更改 和 的类型以result将范围扩大到大约 90 个斐波那契数。sumpreviouslong

如果您需要更多,请考虑使用BigInteger.

于 2013-11-01T20:43:15.407 回答
3

你得到整数溢出。

您的结果是一个有符号的数字,它没有能力存储 + 以外的任何内容2^31,大约。

考虑使用BigInteger而不是intor long

于 2013-11-01T20:43:07.283 回答