斐波那契迭代法-java

斐波那契迭代法-java,java,Java,我创建了一个迭代计算斐波那契数的方法(我不允许使用递归)。在索引47之后,我得到了奇怪的结果: 斐波那契数47:-1323752223 斐波那契数48:512559680 斐波那契数49:-811192543 斐波那契数50:-298632863 我尝试了不同的方法,但它改变了整个事情。 这是我的方法,有什么想法吗?希望你能帮助我 public static long fiboIterative(int n) { if (n == 0) return 0; if

我创建了一个迭代计算斐波那契数的方法(我不允许使用递归)。在索引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;
    }
公共静态长纤维迭代(int n){
如果(n==0)
返回0;
如果(n==1 | | n==2)
返回1;
int-previous=-1;
int结果=1;

对于(int i=0;i您已经溢出了用于存储当前Fibonacci数的
int
。可以存储在
int
中而不溢出的最大值略高于20亿。。您可以使用更大的数据类型,例如
long
sum
previous
,以及
result
,来打印输出更多结果。然而,它最终也会溢出,略多于9/5百万。

您将获得整数溢出

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

考虑使用
biginger
而不是您遇到的
int
long
:Java的
int
类型可以表示介于-2147483648和2147483647之间的数字。第47个斐波那契数是2971215073

result
sum
previous
的类型更改为
long
,以将范围扩大到大约90个斐波那契数


如果需要更多,请考虑使用。

|尝试System.out.println(Integer.MAX\u VALUE+1==Integer.MIN\u VALUE);自己看看。
int
的大小为32位,并且不是无限的。您可以使用
double
来代替,但在精度方面也有限制。我建议您尝试使用
biginger
来编写它作为练习。