斐波那契数列中f(93)处的数字为负值,怎么办?

我正在尝试打印斐波那契数列直到’N’的数字。直到f(92)为止,所有工作均按预期进行,但是当我尝试获取f(93)的值时,值变成负数:“-6246583658587674878”。这怎么可能呢?下面的逻辑有什么错误?

public long fibo(int x){

long[] arr = new long[x+1];

arr[0]=0;

arr[1]=1;

for (int i=2; i<=x; i++){

arr[i]=arr[i-2]+arr[i-1];

}

return arr[x];

}

f(91) = 4660046610375530309

f(92) = 7540113804746346429

f(93) = -6246583658587674878

这是因为数据类型吗?我还要使用什么数据类型来打印最多N个数字的斐波那契数列?N可以是[0..10,000,000]范围内的任何整数。

回答:

您遇到了整数溢出:

 4660046610375530309 <-- term 91

+7540113804746346429 <-- term 92

====================

12200160415121876738 <-- term 93: the sum of the previous two terms

9223372036854775808 <-- maximum value a long can store

为避免这种情况,请使用BigInteger,它可以处理任意数量的数字。

这是转换为use的实现BigDecimal

public String fibo(int x){

BigInteger[] arr = new BigInteger[x+1];

arr[0]=BigInteger.ZERO;

arr[1]=BigInteger.ONE;

for (int i=2; i<=x; i++){

arr[i]=arr[i-2].add(arr[i-1]);

}

return arr[x].toString();u

}

请注意,返回类型必须为String(或BigInteger),因为即使适度的93也会x产生太大的结果,以至于任何Java原语都无法表示。

以上是 斐波那契数列中f(93)处的数字为负值,怎么办? 的全部内容, 来源链接: utcz.com/qa/408409.html

回到顶部