Fibonacci迭代方法 - java

时间:2013-11-01 20:41:08

标签: java

我创建了一种迭代计算Fibonacci数的方法(我不允许使用递归)。在指数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;
    }

}

3 个答案:

答案 0 :(得分:8)

您已经溢出了用于存储当前斐波那契数字的int。在没有溢出的情况下,int中可以存储的最大值略高于20亿。 Integer.MAX_VALUE is 2147483647。您可以为longsumprevious使用更大的数据类型(例如result)来打印更多结果。但是,它最终也会溢出。 Long.MAX_VALUE is 9223372036854775807,有点超过9分。

答案 1 :(得分:4)

您正在遇到integer overflow:Java的int类型可以表示-2,147,483,648和2,147,483,647之间的数字。第47个斐波纳契数是2,971,215,073。

resultsumprevious的类型更改为long,将范围扩展到约90斐波纳契数。

如果您需要更多内容,请使用BigInteger

答案 2 :(得分:3)

你正在获得整数溢出。

您的结果是一个签名号码,无法存储+ 2^31以外的任何内容,大约

考虑使用BigInteger而不是intlong