2011-04-01 166 views
4

下面是代碼:斐波納契數列

class Fibonacci { 
    static final int MIN_INDEX = 1; 
    public static void main (String[] args){ 
     int high = 1; 
     int low = 1; 
     String jel; 
     System.out.println("9: " + high); 

    for (int i = 8; i >= MIN_INDEX; i--){ 
     if (high % 2 == 0) 
      jel = " *"; 
     else 
      jel = " "; 
     System.out.println(i + ": " + high + jel); 
     high = low + high; 
     low = high - low; 


    } 
} 
} 

我想使這個計劃,向後寫入輸出數字。所以我想這不僅僅是'我'從最後一步走到第一步,而是數字也是如此。

在這個例子中,輸出是:1,1,2,3,5,8,例如...但我想要顯示它的順序看起來像:例如...,8,5,3 ,2,1,1。

我試圖改變高和低,但我不能讓這個程序的力量運行「落後」。

回答

0

是啊..只是像其他人說的..我會在收集儲存,然後進行排序和打印

我只是修改你的例子...運行它,看看這是否是你所期望的行爲。

class Fibonacci { 
static final int MIN_INDEX = 1; 

public static void main(String[] args) { 
    int high = 1; 
    int low = 1; 
    String jel; 
    List<String> numbers = new ArrayList<String>(); 
    numbers.add("9: " + high); 

    for (int i = 8; i >= MIN_INDEX; i--) { 
     if (high % 2 == 0) { 
      jel = " *"; 
     } 
     else { 
      jel = " "; 
     } 
     numbers.add(i + ": " + high + jel); 
     high = low + high; 
     low = high - low; 
    } 

    Collections.sort(numbers); 
    System.out.println(numbers); 
} 

}

+0

排序不是你想要的,你只是簡單地反轉結果(它通常比排序更快)。 – 2011-04-01 19:14:48

2

你可以在你走時將它們插入到一個數組中,然後將數組反轉並打印出來? 不完全有效,但它很容易做到。

0

一種選擇是將輸出存儲到數組中,然後將數組向後移動。

2

有兩種可能性:

  1. 商店的數字,而不是將它們打印並在最後打印出來的反向。
  2. 運行該算法以發現最後兩個數字,然後生成並打印反向系列r,注意r[i]=r[i-2]-r[i-1]
+0

你的意思是'f [i] = f [i + 1] - f [i + 1]',不是嗎? – 2011-04-01 16:30:38

+0

不,我不知道。在「8,5,3,2,1,1」中,每項是前兩步的元素與前一項的差值。 – NPE 2011-04-01 16:39:14

+0

啊,但不要稱之爲'f',最好使用'rf'之類的東西(反向斐波納契)。 – 2011-04-01 17:01:56

2
int high = 8; 
int low = 5; 
while (low > 0) { 
    System.out.println(high); 
    int temp = low; 
    low = high - low; 
    high = temp; 
} 
+0

假設他知道序列的最後兩個數字... – 2011-04-01 16:04:23

+0

-1..hmm..not不夠好 – Omnipotent 2011-04-26 18:51:26

0

可以將所有的元素存儲到數據結構然後打印出來向後由於斐波納契數列的性質,由於每個值(除了所述第一和第二)取決於總和以前的兩個值。

0

我也只想通過序列恢復正常運行(即不在反向),結果存儲在一個集合(可能是一個ArrayList)英寸但是,沒有必要到後整理,甚至遍歷以相反的順序,你可以只添加的每個新的「入口」的順序進位0在列表中的列表,當您去使用:

list.add(0, i + ": " + high + jel); 

這將確保列表以相反的順序存儲序列。

這只是另一種可能的解決方案。

6

未安裝Java這裏,但Fibonacci numbers have an explicit closed form

f[n_] := [email protected](GoldenRatio^n - (1 - GoldenRatio)^n)/Sqrt[5]; 

黃金比例=(1 +的Sqrt [5])/ 2

所以你可以做:

For[i = 10, i > 0, i--, 
    Print[f[i]]; 
    ]; 

輸出:

55. 
34. 
21. 
13. 
8. 
5. 
3. 
2. 
1. 
1. 

編輯

順便注意The Golden Ratio是那些精彩無處不在的數字,你會在自然界,科學和藝術發現之一。

您可能會發現從Sea Shells的帕臺農神廟的黃金比例。