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;


    }
}
}

このプログラムを作りたいのですが、出力された数値を逆に書きます。だから私は、最後から最初への ' i ' ステップだけでなく、数字も必要です。

この例では、出力は次のとおりです: 1, 1, 2, 3, 5, 8 , eg... しかし、私はそれを次のような順序で表示したい: eg... , 8, 5, 3, 2, 1 、1。

高低を変えてみたのですが、このプログラムを強制的に「逆向き」に実行させることはできません。

4

8 に答える 8

6

ここに Java はありませんが、フィボナッチ数には明示的な閉形式があります。

f[n_] := N@(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.

編集

余談ですが、黄金比は、自然、科学、芸術に見られる素晴らしい普及数の 1 つです。

貝殻からパルテノンまでの黄金比を見つけることができます。

于 2011-04-26T21:09:05.870 に答える
2

それらを配列に挿入してから、配列を逆にして印刷することはできますか? 正確には効率的ではありませんが、簡単に実行できます。

于 2011-04-01T15:54:09.933 に答える
2

次の 2 つの可能性があります。

  1. 数字を印刷する代わりに保存し、最後に逆に印刷します。
  2. rアルゴリズムを順方向に実行して最後の 2 つの数字を検出し、その場で逆数列を生成して出力しr[i]=r[i-2]-r[i-1]ます。
于 2011-04-01T15:55:36.407 に答える
2
int high = 8;
int low = 5;
while (low > 0) {
  System.out.println(high);
  int temp = low;
  low = high - low;
  high = temp;
}
于 2011-04-01T15:56:01.213 に答える
0

私も通常どおり(つまり、逆ではなく)シーケンスを実行し、結果をコレクション(おそらくArrayList)に格納します。ただし、リストを並べ替えたり、逆の順序でトラバースしたりする必要はありません。次のコマンドを使用して、シーケンス内の新しい「エントリ」をリストの位置0に追加するだけです。

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

これにより、リストにシーケンスが逆の順序で格納されるようになります。

それはちょうど別の可能な解決策です。

于 2011-04-01T19:18:33.733 に答える
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);
}

}

于 2011-04-01T17:09:25.527 に答える
0

1 つのオプションは、出力を配列に格納してから、配列を逆方向にトラバースすることです。

于 2011-04-01T15:55:35.027 に答える
0

フィボナッチ数列の性質により、すべての要素をデータ構造に格納して逆方向に出力できます。これは、各値 (最初と 2 番目を除く) が前の 2 つの値の合計に依存するためです。

于 2011-04-01T15:57:34.987 に答える