题目介绍
写一个函数,输入 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
示例2
输入: n = 5
输出: 5
提示:
0 <= n <= 100剑指 Offer 10- I. 斐波那契数列
b站视频
解题思路
斐波那契数列是一道经典的数学题,根据斐波那契数列的规则 F(n) = F(n - 1) + F(n - 2), 可以使用递归很方便的解决,但是当 n 的值比较大时,递归很容易导致栈溢出
由于斐波那契数列的每个值只和其前面的两个值相关,所以可以使用滚动数组的方式,每次只保存 F(n - 2), F(n - 1), F(n)的值
解题代码
var fib = function(n) {
// 当 n 的值为 0 或者 1 时,不需要计算,直接返回 n 值
if (n === 0) return 0
if (n === 1) return 1
// 利用滚动数组,每次保存 F(n - 2), F(n - 1), F(n) 三个值
// 用完就把最低位丢掉
let a = 0, b = 1, c
for (let i = 1; i < n; i++) {
c = (a + b) % 1000000007
a = b
b = c
}
// 返回最后的结果
return c
};