0

您好,我对在此页面中找到的此代码有疑问。我已经自己完成了斐波那契,但我认为这更好。这个想法是你必须选择“n”并且代码工作直到你达到n。它适用于第一个数字,但我不知道为什么当我选择例如 n = 70 时会有负数!!我不知道为什么会发生这种情况,但我无法解决它,我试图解决我书中的所有练习,因为这些方法对我来说很难。对不起我糟糕的英语。

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;
}
}           

谢谢!

4

3 回答 3

0

一个 int 仅限于一定数量的位。如果您使用 Java,则 int 可以容纳 32 位(范围从 -2,147,483,648 到 2,147,483,647)。一旦斐波那契数高于 int 的最大值,您将开始看到负值。

于 2014-08-15T15:16:05.690 回答
0

Ryan 是正确的 - 在达到 int 的最大限制后,它将变为负数。您发布的代码将打印前 n+1 个斐波那契数(您从 0 开始到 70 = 71 个数字)。第 71 个斐波那契数是 308,061,521,170,129,远远超过 int 的限制。

不要使用 int,而是使用 long,它的最大限制为 9,223,372,036,854,775,807,这至少可以让您达到 n=91(前 92 个斐波那契数 - 最多 7,540,113,804,746,346,429)。

于 2014-08-15T15:40:03.010 回答
0

你可以试试这个代码,你会得到一个accpet。

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;
}
} 
于 2018-07-29T11:24:16.697 回答