「这是我参与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)
}
进一步优化
从图上看出,执行时间是比较靠后的,说明代码还是消耗了较多时间,需要进一步的优化。
🔧问题:递归每次都需要重新计算前面的
💡思路:采取缓存的方式,利用一个数组`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]
}
相比之前的所消耗的时间,有了明显的提升。