当斐波那契数列> 2 时,迭代斐波那契 Java 代码返回 0



下面的代码从Fibonacci 0到100进行迭代。然而,在斐波那契数达到2并移动到3之后,得到的数字是0。当他们应该是3岁、5岁、8岁等等的时候,我所看到的一切都应该奏效,我不知道为什么。

但是你会注意到

else{
    return 0;
}

在代码的末尾,我这样做是因为代码对我大喊代码要返回long类型的值。如果有办法解决这个问题,请让我们知道,谢谢大家

 public static void runFibonacci () {
    for (int N = 0; N < 100; N++)
        StdOut.printf ("fibonacci(%2d)=%dn", N, fibonacci (N));
}
public static long fibonacci (int N) {
    long low = 0;
    long tempLow = 0;
    long tempHi = 0;
    long hi = 0;
    if (N == 0) return 0;
    if (N == 1) {
        hi ++;
        return 1;
    }
    if (N == 2){
        low ++;
        return 1;
    }
    if (N > 2){
        tempLow = hi;
        tempHi = (low + hi);
        hi = tempHi;
        low = tempLow;
        return hi;
    }
    else{
        return 0;
    }
}

输出

fibonacci( 0)=0
fibonacci( 1)=1
fibonacci( 2)=1
fibonacci( 3)=0
fibonacci( 4)=0
fibonacci( 5)=0

预期输出

fibonacci( 0)=0
fibonacci( 1)=1
fibonacci( 2)=1
fibonacci( 3)=2
fibonacci( 4)=3
fibonacci( 5)=5
etc

正如@WannaBeCoder所说,最好的解决方案是公开我的变量,正如你将在我发布的代码顶部看到的那样。正如第一个方法调用的方法所述,每次都重置变量。这很有道理。我学到了一些新东西,我很感激

    public static long low = 0;
public static long tempLow = 0;
public static long tempHi = 0;
public static long hi = 0;
public static void runFibonacci () {
    for (int N = 0; N < 100; N++)
        StdOut.printf ("fibonacci(%2d)=%dn", N, fibonacci (N));
}
public static long fibonacci (int N) {
    if (N == 0) return 0;
    if (N == 1) {
        hi ++;
        return 1;
    }
    if (N == 2){
        low ++;
        return 1;
    }
    if (N > 2){
        tempLow = hi;
        tempHi = (low + hi);
        hi = tempHi;
        low = tempLow;
        return hi;
    }
    else{
        return 0;
    }
}

输出

fibonacci( 0)=0
fibonacci( 1)=1
fibonacci( 2)=1
fibonacci( 3)=2
fibonacci( 4)=3
fibonacci( 5)=5
fibonacci( 6)=8
fibonacci( 7)=13
fibonacci( 8)=21
fibonacci( 9)=34
fibonacci(10)=55
fibonacci(11)=89
fibonacci(12)=144
fibonacci(13)=233
fibonacci(14)=377
fibonacci(15)=610
fibonacci(16)=987
fibonacci(17)=1597
fibonacci(18)=2584
fibonacci(19)=4181
fibonacci(20)=6765
fibonacci(21)=10946
fibonacci(22)=17711
fibonacci(23)=28657
fibonacci(24)=46368
fibonacci(25)=75025
fibonacci(26)=121393
fibonacci(27)=196418
fibonacci(28)=317811
fibonacci(29)=514229
fibonacci(30)=832040
fibonacci(31)=1346269
fibonacci(32)=2178309
fibonacci(33)=3524578
fibonacci(34)=5702887
fibonacci(35)=9227465
fibonacci(36)=14930352
fibonacci(37)=24157817
fibonacci(38)=39088169
fibonacci(39)=63245986
fibonacci(40)=102334155
fibonacci(41)=165580141
fibonacci(42)=267914296
fibonacci(43)=433494437
fibonacci(44)=701408733
fibonacci(45)=1134903170
fibonacci(46)=1836311903
fibonacci(47)=2971215073
fibonacci(48)=4807526976
fibonacci(49)=7778742049
fibonacci(50)=12586269025
fibonacci(51)=20365011074
fibonacci(52)=32951280099
fibonacci(53)=53316291173
fibonacci(54)=86267571272
fibonacci(55)=139583862445
fibonacci(56)=225851433717
fibonacci(57)=365435296162
fibonacci(58)=591286729879
fibonacci(59)=956722026041
fibonacci(60)=1548008755920
fibonacci(61)=2504730781961
fibonacci(62)=4052739537881
fibonacci(63)=6557470319842
fibonacci(64)=10610209857723
fibonacci(65)=17167680177565
fibonacci(66)=27777890035288
fibonacci(67)=44945570212853
fibonacci(68)=72723460248141
fibonacci(69)=117669030460994
fibonacci(70)=190392490709135
fibonacci(71)=308061521170129
fibonacci(72)=498454011879264
fibonacci(73)=806515533049393
fibonacci(74)=1304969544928657
fibonacci(75)=2111485077978050
fibonacci(76)=3416454622906707
fibonacci(77)=5527939700884757
fibonacci(78)=8944394323791464
fibonacci(79)=14472334024676221
fibonacci(80)=23416728348467685
fibonacci(81)=37889062373143906
fibonacci(82)=61305790721611591
fibonacci(83)=99194853094755497
fibonacci(84)=160500643816367088
fibonacci(85)=259695496911122585
fibonacci(86)=420196140727489673
fibonacci(87)=679891637638612258
fibonacci(88)=1100087778366101931
fibonacci(89)=1779979416004714189
fibonacci(90)=2880067194370816120
fibonacci(91)=4660046610375530309
fibonacci(92)=7540113804746346429
fibonacci(93)=-6246583658587674878
fibonacci(94)=1293530146158671551
fibonacci(95)=-4953053512429003327
fibonacci(96)=-3659523366270331776
fibonacci(97)=-8612576878699335103
fibonacci(98)=6174643828739884737
fibonacci(99)=-2437933049959450366

您可以使用递归来获得fibonacci序列。您需要修改您的代码,如下所示:

private int fibonacci(int n) {
        if (n == 0)
            return 0;
        else if (n == 1)
            return 1;
        else
            return fibonacci(n - 1) + fibonacci(n - 2);
    }

希望能有所帮助。

/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone  // should be the class you are using.
{
    public static long low = 0;
    public static long tempLow = 0;
    public static long tempHi = 0;
    public static long hi = 0;  //made these global
    public static void main (String[] args) throws java.lang.Exception
    {
        //function from which you are calling runFibonacci.
        runFibonacci();
    }
    public static void runFibonacci () {
        for (int N = 0; N < 100; N++)
            System.out.println(fibonacci (N));
    }
    public static long fibonacci (int N) {
        long toReturn = 0;
        if (N == 0) return toReturn;
        if (N == 1) {
           hi ++;
           toReturn = 1;
        }
        if (N == 2){
            low ++;
            toReturn = 1;
        }
        if (N > 2){
            tempLow = hi;
            tempHi = (low + hi);
            hi = tempHi;
            low = tempLow;
            toReturn = hi;
        }
        return toReturn;
    }
}

在代码中做了一个小更改。这是可行的。每次调用函数时,都会创建一组新的变量。

最新更新