美文网首页
【算法】斐波那契数列第n位 - 去重递归/双指针迭代

【算法】斐波那契数列第n位 - 去重递归/双指针迭代

作者: 王月亮17 | 来源:发表于2024-04-06 09:27 被阅读0次

    题目

    给定n,求斐波那契数列第n位的数值。

    斐波那契数列:0 1 1 2 3 5 8 13 ……
    每个数等于前面两个数相加,第n位等于第(n - 1)位加上第(n - 2)位。

    原理

    去重递归

    使用递归的方式计算出结果,但使用一个数组保存已经计算出来的值,防止重复计算,提高性能。

    双指针迭代

    定义一个指针 low = 0,和一个指针 high = 1,每次迭代将 low + high 赋值给 high,将原来的 high 赋值给 low,从2开始遍历到n即得出结果。

    代码

    去重递归

        public static void main(String[] args) {
            System.out.println(fibonacciByRecursion(10));
        }
    
        private static int fibonacciByRecursion(int n) {
            int[] fibonacciArr = new int[n + 1];
            return recursion(n, fibonacciArr);
        }
    
        private static int recursion(int n, int[] fibonacciArr) {
            if (n == 0 || n == 1) {
                return n;
            }
            if (fibonacciArr[n] != 0) {
                return fibonacciArr[n];
            }
            return recursion(n - 1, fibonacciArr) + recursion(n - 2, fibonacciArr);
        }
    

    双指针迭代

        public static void main(String[] args) {
            System.out.println(fibonacciByTwoPointer(10));
        }
    
        private static int fibonacciByTwoPointer(int n) {
            if (n == 0 || n == 1) {
                return n;
            }
            int low = 0, high = 1;
            for (int i = 2; i <= n; i++) {
                int sum = low + high;
                low = high;
                high = sum;
            }
            return high;
        }
    

    相关文章

      网友评论

          本文标题:【算法】斐波那契数列第n位 - 去重递归/双指针迭代

          本文链接:https://www.haomeiwen.com/subject/izgotjtx.html