【发布时间】:2017-06-18 11:07:19
【问题描述】:
此代码在 n = 46 后没有返回正确答案。我可以做些什么来解决这个问题以获得更高的第 n 项?
public static long fibonacciIterative(long n)
{
if(n <= 1) {
return n;
}
int x = 1;
int y = 1;
for(int i=2; i<n; i++)
{
int z = x;
x+= y;
y = z;
}
return x;
}
感谢大家的积极反馈。在提出问题后,我一跑下代码就想通了。
【问题讨论】:
-
首先将
x、y和z更改为long。 -
提示:你认为
int可以代表的最大数量是多少?您认为斐波那契数字超过 46 有多大? -
int保存从 -2^31 到 2^31-1 的数字,因为int在爪哇。任何斐波那契数 n>46 项都超过了这些限制。您可以使用long,它是 64 位并保存更大的数字。BigInteger持有更大,如果您需要超过long的限制。 -
@Henry True 感谢您指出这一点。