Iteral fibonacci java code returns 0 when fibonacci sequence > 2

丶灬走出姿态 提交于 2019-12-25 02:07:41

问题


the code below interates from Fibonacci 0 to 100. However after the Fibonacci number reaches 2 and moves on to 3, the resulting numbers are 0. when they should be 3, 5, 8 etc. by everything I see it should work and I am not sure why.

However you will notice the

else{
    return 0;
}

at the end of the code, I did that because the code yells at me that the code is to return a value of type long. If there is a way to fix that please let know thanks guys

 public static void runFibonacci () {
    for (int N = 0; N < 100; N++)
        StdOut.printf ("fibonacci(%2d)=%d\n", 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;
    }
}

output

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

Expected output

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

回答1:


As @WannaBeCoder said, the best fix was to make my variables public as you will see at the top of the code I am posting. As stated the method called by the first method, the variables were reset each time. Which makes sense. I learned something new and I am grateful

    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)=%d\n", 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;
    }
}

output

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



回答2:


You can get fibonacci sequence by using recursion. You will need to modify your code something along the lines of the following:

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

Hope that helps.




回答3:


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

Made a small change in your code. This would work. each time you are calling a function a new set of variables are created.



来源:https://stackoverflow.com/questions/29530090/iteral-fibonacci-java-code-returns-0-when-fibonacci-sequence-2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!