【算法】斐波那契数列第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即得出结果。

代码

去重递归
java 复制代码
    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);
    }
双指针迭代
java 复制代码
    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;
    }
相关推荐
Gorway5 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风5 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect5 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea19 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉