【算法】斐波那契数列第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;
    }
相关推荐
User_芊芊君子3 分钟前
【C语言经典算法实战】:从“移动距离”问题看矩阵坐标计算
c语言·算法·矩阵
wolf犭良1 小时前
37、aiomysql实操习题
开发语言·python·算法
xin007hoyo1 小时前
算法笔记.spfa算法(bellman-ford算法的改进)
数据结构·笔记·算法
向哆哆1 小时前
Java 加密与解密:从算法到应用的全面解析
java·开发语言·算法
uhakadotcom1 小时前
刚发布的PyTorch 2.7提供了什么 新特性
算法·面试·github
新生农民2 小时前
30分钟解决8道算法题
java·数据结构·算法
bbc1212262 小时前
2025/4/23 心得
数据结构·算法
WaitWaitWait017 小时前
LeetCode每日一题4.20
算法·leetcode
蒟蒻小袁7 小时前
力扣面试150题--有效的括号和简化路径
算法·leetcode·面试
跳跳糖炒酸奶8 小时前
第十五讲、Isaaclab中在机器人上添加传感器
人工智能·python·算法·ubuntu·机器人