2011-04-01 111 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的帕台农神庙的黄金比例。