Fibonacci序列向后

时间:2011-04-01 15:53:01

标签: java math fibonacci

以下是代码:

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,例如...但我想在序列中显示它:例如......,8,5,3, 2,1,1。

我试图改变高低,但我不能让这个程序强制“向后”运行。

8 个答案:

答案 0 :(得分:6)

此处没有Java,但是Fibonacci numbers have an explicit closed form

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

哪里

GoldenRatio =(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到帕台农神庙的黄金比例。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

有两种可能性:

  1. 存储数字而不是打印它们,最后反向打印出来。
  2. 向前运行算法以发现最后两个数字,然后通过注意r来生成并打印反向系列r[i]=r[i-2]-r[i-1]

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

Yup ..就像其他人说的那样..我会存储在一个集合中,然后排序和打印

我刚修改了你的例子......运行它,看看这是否是你期望的行为。

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);
}

}

答案 7 :(得分:0)

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

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

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

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