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

题目

给定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;
    }

相关推荐

  1. 数列实现和for循环实现

    2024-04-07 15:22:07       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 15:22:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 15:22:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 15:22:07       87 阅读
  4. Python语言-面向对象

    2024-04-07 15:22:07       96 阅读

热门阅读

  1. LeetCode 869. 重新排序得到 2 的幂

    2024-04-07 15:22:07       45 阅读
  2. 算法练习----力扣每日一题------7

    2024-04-07 15:22:07       43 阅读
  3. C++初级---模板初阶

    2024-04-07 15:22:07       41 阅读
  4. 多线程(36)AtomicStampedReference

    2024-04-07 15:22:07       43 阅读
  5. 上升Chrome安装Vue插件vue-devtools

    2024-04-07 15:22:07       31 阅读
  6. 基于开源软件构建存储解决方案的思考

    2024-04-07 15:22:07       37 阅读