Java 斐波那契倒向序列

Java 斐波那契倒向序列,java,math,fibonacci,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;

代码如下:

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


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

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

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

有两种可能性:

  • 存储数字,而不是打印它们,最后以相反的方式打印出来
  • 向前运行算法以发现最后两个数字,然后动态生成并打印反向序列
    r
    ,注意
    r[i]=r[i-2]-r[i-1]

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

    是的。。就像其他人说的。。我会储存在一个集合中,然后分类和打印

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

    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);
    }
    
    类斐波那契{
    静态最终整数最小指数=1;
    公共静态void main(字符串[]args){
    int高=1;
    int低=1;
    串果冻;
    列表编号=新的ArrayList();
    数字。添加(“9:+高);
    对于(int i=8;i>=MIN\u索引;i--){
    如果(高%2==0){
    jel=“*”;
    }
    否则{
    果冻=”;
    }
    添加(i+“:”+高+果冻);
    高=低+高;
    低=高-低;
    }
    集合。排序(编号);
    系统输出打印项次(数字);
    }
    

    }

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

    list.add(0, i + ": " + high + jel);
    
    这将确保列表按相反顺序存储序列

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

    这里没有Java,但是:

    在哪里

    一枝黄花=(1+Sqrt[5])/2

    因此,您可以:

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

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

    作为一个旁白,这是一个在自然、科学和艺术领域中随处可见的数字


    你可以找到帕台农神庙的黄金比例。

    你的意思是
    f[i]=f[i+1]-f[i+1]
    ,不是吗?不,我没有。在“8,5,3,2,1,1”中,每个项都是前面两步的元素和前面一个项之间的差值。啊,但是不要称它为
    f
    ,最好使用
    rf
    之类的东西(反向斐波那契)。排序并不是你真正想要的,你只需要反转结果(通常比排序快)。
    For[i = 10, i > 0, i--,
         Print[f[i]];
      ];  
    
    55.
    34.
    21.
    13.
    8.
    5.
    3.
    2.
    1.
    1.