📝Leetcode 斐波那契数列

455 阅读1分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

题目🌵

📝Leetcode 斐波那契数列

✏️leetcode-cn.com/problems/fe…


写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:1

解题思路💡

递归

  • 后面一个数是前面两个数之和,首先想到的是递归解决
var fib = function (n) {
    if (n == 1 || n == 0) {
        return n
    }
    return fib(n - 1) + fib(n - 2)
}

image-20220118164637385

进一步优化

从图上看出,执行时间是比较靠后的,说明代码还是消耗了较多时间,需要进一步的优化。

🔧问题:递归每次都需要重新计算前面的

💡思路:采取缓存的方式,利用一个数组`cache`来存储前面计算的结果(动态规划)
var fib = function (n) {
    //递推
    let cache = []
    for (let i = 0; i <= n; i++) {
        if (i == 1 || i == 0) {
            cache[i] = i
        } else {
            cache[i] = cache[i - 1] + cache[i - 2]
        }
    }
    return cache[n]
}

image-20220118165507877

相比之前的所消耗的时间,有了明显的提升。