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.

编辑

顺便说一句,黄金比例是您在自然、科学和艺术中发现的那些美妙的普遍数字之一。

您可能会发现从贝壳到帕台农神庙的黄金比例。

于 2011-04-26T21:09:05.870 回答
2

您可以将它们插入到数组中,然后将数组反转并打印出来?效率不高,但很容易做到。

于 2011-04-01T15:54:09.933 回答
2

有两种可能:

  1. 存储数字而不是打印它们,最后将它们反向打印出来。
  2. 向前运行算法以发现最后两个数字,然后r通过注意生成并打印反向序列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

一种选择是将输出存储在一个数组中,然后向后遍历数组。

于 2011-04-01T15:55:35.027 回答
0

由于斐波那契数列的性质,您可以将所有元素存储到数据结构中,然后将它们向后打印,因为每个值(第一个和第二个除外)取决于前两个值的总和。

于 2011-04-01T15:57:34.987 回答
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

我也会正常运行序列(即不反向)并将结果存储在一个集合中(可能是一个 ArrayList)。但是不需要在列表之后排序甚至以相反的顺序遍历列表,您可以在使用时将序列中的每个新“条目”添加到列表中的位置 0 中:

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

这将确保列表以相反的顺序存储序列。

这只是另一种可能的解决方案。

于 2011-04-01T19:18:33.733 回答