斐波那契迭代法-java
我创建了一个迭代计算斐波那契数的方法(我不允许使用递归)。在索引47之后,我得到了奇怪的结果:斐波那契迭代法-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:-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
来编写它作为练习。