您好我对此页面中找到的此代码有疑问。 我已经完成了我自己的斐波纳契,但我认为这更好。 我们的想法是你必须选择“n”并且代码一直有效直到你达到n。 它适用于第一个数字,但我不知道为什么当我选择例如n = 70时,有负数!我不知道为什么这个hapens但我无法解决它,我试图解决我的书的所有练习,因为这些方法对我来说很难。索里为我可怜的英语。
public class NewFibonacci extends ConsoleProgram {
int a = 0;
int b = 1;
public void run() {
int n = readInt ("n: ");
for(int i = 0; i <= n; i++) {
println (fibonacci (n));
}
}
private int fibonacci(int n) {
int c = a + b;
a = b;
b = c;
return c;
}
}
谢谢!
答案 0 :(得分:0)
int限制为一定数量的位。如果您使用的是Java,那么int可以容纳32位(范围从-2,147,483,648到2,147,483,647)。一旦Fibonacci数字高于int的最大值,您就会开始看到负值。
答案 1 :(得分:0)
Ryan是正确的 - 在达到int的最大限制后,它将变为负数。您发布的代码将打印出前n + 1个Fibonacci数字(您从0开始,到70 = 71个数字)。第71个斐波纳契数是308,061,521,170,129,这超过了int的限制。
不使用int,而是使用long,其最大限制为9,223,372,036,854,775,807,这至少会使你达到n = 91(前92个Fibonacci数字 - 最多7,540,113,804,746,346,429)。
答案 2 :(得分:0)
您可以尝试使用此代码,然后获得一个称号。
public class NewFibonacci extends ConsoleProgram {
long long a = 0;
long long b = 1;
public void run() {
int n = readInt ("n: ");
for(int i = 0; i <= n; i++) {
println (fibonacci (n));
}
}
private int fibonacci(int n) {
long long c = a + b;
a = b;
b = c;
return c;
}
}