一、题目描述
斐波那契数,通常使用 F(n) 表示。
形成的序列成为 斐波那契数列。
该数列从 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
也就是说:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给你 n ,请计算 F(n) 。
示例 1:
输入:2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
输入:3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
输入:4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
二、思路分析
了解过斐波那契数列的,然后加上题目给出的公式基本上就知道怎么写了。
打个比方 n = 5 就代表获取斐波那契数列的第五级的数据
0: 0
1: 1
2: 0 + 1 = 1
3: 1 + 1 = 2
4: 1 + 2 = 3
5: 2 + 3 = 5
6: 3 + 5 = 8
...
所以只要处理了边界情况即 0 的时候返回 0 、1 的时候返回 1,其他情况皆返回 (n - 1) + (n - 2) 即可,也就是可以直接使用递归来解决这个问题。
三、AC 代码
方法 1:
var fib = function(n) {
if(n < 2) return n
return fib(n - 1) + fib(n - 2)
}
方法 2: 优化添加了 记忆 ,也就是缓存了之前计算过的数列的值,再次计算的时候直接返回值即可。
const map = new Map()
var fib = function(n) {
if(n < 2) return n
if(!map.has(n)) {
map.set(n, fib(n - 1) + fib(n - 2))
}
return map.get(n)
}
四、总结
斐波那契数数的值就是它后两位的值的和。
学会使用 记忆 来优化代码。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情