2013-04-24 95 views
2

我有一個遞歸的Fibonacci序列遞歸斐波那契序列打印出清單

if (term < 2){ 
     System.out.print("1 "); 
     return 1; 
    } 
     int results = fibonacci(term - 1) + fibonacci(term - 2); 
     System.out.print(results + " "); 

     return results; 

輸出我得到後續代碼

你要開什麼期限做斐波那契序列最多:4

1 1 2 1 3 1 1 2 5第四是5

我如何使它所以它打印

1 1 2 3第四是5

回答

0

迭代fibion​​acci序列 - 有它撒謊的地方

public static int fib(int n) { 
      int prev1=0, prev2=1; 
      for(int i=0; i<n; i++) { 
       int savePrev1 = prev1; 
       prev1 = prev2; 
       prev2 = savePrev1 + prev2; 
      } 
      return prev1; 
} 
1

使用尾遞歸。

public static void main(String[] args) { 

    System.out.print("The 10th is: " + fibonnaci(10)); 
    } 

    public static int fibonnaci(int number) { 
    return fibonnaciHelper(number, 1, 1); 
    } 

    public static int fibonnaciHelper(int term, int lower, int higher) { 
     if (term < 2){ 
      return higher; 

     } 

     System.out.print(higher + " "); 
     int results = fibonnaciHelper(term - 1, higher, higher + lower); 
     return results; 
    } 
+0

我瞭解你的程序工作,但是,我想我得到的打印輸出1 1 2 3 5 8 13 ......與我寫的遞歸程序。 – 2013-04-24 21:35:27

+0

@Shi_No_Tenshi嘗試System.out.println(fibnnoaci(6)); – 2013-04-24 21:43:14

+0

@Shi_No_Tenshi我不明白你的問題 – durron597 2013-04-24 21:47:20

0

你可以嘗試像以下:

public void fib(int n){ 
    if(n==0) 
     System.out.println(1); 

    else System.out.println(fib(1,n,0,1); 
} 

private int fib(int iteration, int limit, int n0, int n1){ 
    if(iteration==limit) 
     return(n0+n1); 

    fib(++iteration,limit,n1,(n0+n1)); 
}