2015-03-31 124 views
1
import static java.lang.System.*; 

class NA_False { 
public static void main(String[] args) { 
    int fibonacci = fibo(5); 
    System.out.println(fibonacci); 
} 
static int fibo(int n) { 
    if (n == 0 || n == 1) { 
     out.println(n); 
     return n; 
    } 
    else { 
     int n1 = fibo(n - 1); 
     int n2 = fibo(n - 2); 
     out.println((n1 + n2) + "=" + n1 + "+" + n2); 
     return n1 + n2; 
    } 
} 
} 

我想說明我們如何得到每個斐波納契數,但是我得到了太多不必要的步驟。顯示斐波那契數的算術?

+1

[看這裏](http://imagizer.imageshack.us/a/img440/2996/tu2.png) – 2015-03-31 20:12:39

回答

1

使用遞歸這是很簡單 -

public static int fibo(int n){ 
     if(n == 1 || n == 2){ 
      return 1; 
     } 

     return fibo(n-1) + fibo(n -2); 
} 

現在從你的主要方法,你可以稱它爲打印它 -

int fibonacci = fibo(5); 
System.out.println(fibonacci); 

更新:當你想一步步結果那麼你可以使用下面的解決方案使用for循環 -

public class FiboTest{ 

    public static void main(String[] args){ 

      int term = fibo(17); 
      //1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 
      System.out.println(); 
      System.out.println("Result: " +term); 
    } 

    public static int fibo(int n){ 

      int first = 1; 
      int second = 1; 
      int third = 0; 
      for(int i=1; i<(n-1); i++){ 

       third = first+second; 
       System.out.println(first +" + "+ second +" = "+ third); 

       //update first and second terms 
       first = second; 
       second = third; 
      } 

      return third; 
    } 
} 
+0

我認爲目標不是僅僅顯示結果,而是要顯示遞歸計算的每一步。 – tomse 2015-03-31 20:28:07

+0

我想打印每個數字如何加在一起,例如我想打印8 = 5 + 3。 – TheJuggler 2015-03-31 20:30:05

0

問題是這可能是計算斐波納契數的最糟糕的方法。原因是,爲什麼你多次看到最多的添加,因爲你多次調整它們。
通常情況下,您將從fib編號1和2開始,然後繼續處理序列,直至達到所需的編號。

0

遞歸計算fibo(n)時,它會爲每個調用打開兩個分支。如果我們這樣做fibo(5),例如,它的作用:

fibo(5) = fibo(4) + fibo(3) 

然後它需要calulcate fibo(4),它確實是這樣:

fibo(4) = fibo(3) + fibo(2) 

正如你所看到的,fibo(3)被調用了兩次。這就是爲什麼你會打印兩次2=1+1。這也將發生多次爲fibo(2)fibo(1)

如果你要打印的每個總和只有一次,你將需要存儲你已經計算出的值,或使用不同的方法來計算Fibonacci數。

您可以用for循環反覆地做到這一點:

static int fibo(int n) { 
    int p1 = 0; 
    int p2 = 1; 
    for (int i = 0; i < n; i++) { 
     int tmp = p1 + p2; 
     System.out.println(tmp + "=" + p1 + "+" + p2); 
     p1 = p2; 
     p2 = tmp; 
    } 
    return p2; 
} 

注意這個返回的形式1 1 2 3...序列。如果您需要表單0 1 1 2 3...,則需要用return p1替換return p2