繁体   English   中英

使用数组反向打印斐波那契数列 - Java

[英]Printing the fibonacci sequence in reverse using arrays - Java

用于按正常顺序打印斐波那契,但无法弄清楚如何将其从 4181 反转为 0。

    int[] numbers = new int[20];

    numbers[0] = 0;
    numbers[1] = 1;


    System.out.println("Fibonacci sequence:");
    System.out.println( numbers[0] );
    System.out.println( numbers[1] );


    for (int i = 2; i < 20; i++) {


        numbers[i] = numbers[i-2] + numbers[i-1];
        System.out.println( numbers[i] );
        for (int j = 19; j >= 0; j++) {
            numbers[j] = numbers[j-2] + numbers[j-1];
        System.out.println( numbers[j] );
    }
}

} }

第二个循环有不正确的增量部分 - 而不是j++应该是j-- 它现在说的是“从数字19开始。当数字大于或等于0时继续。

每次迭代由1"数的增加

显而易见的解决方案是首先递归地创建斐波那契数列(就像您所做的那样),然后将其反转:

List<Integer> list = Arrays.asList(arr);
Collections.reverse(list);

另一个(数学上更优雅的)解决方案是使用显式公式通过索引计算斐波那契数列的每个成员,从n = 20开始一直计算到n = 1

p = (1 + sqrt(5)) / 2
q = (1 - sqrt(5)) / 2
F(n) = ((p ^ n) - (q ^ n)) / sqrt(5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM