【算法】斐波那契数列第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;
    }
相关推荐
yyt_cdeyyds5 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao32 分钟前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian41 分钟前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek1 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz1 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang2 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca2 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱2 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
今天吃饺子2 小时前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
是阿建吖!2 小时前
【优选算法】二分查找
c++·算法