题目描述
写一个函数,输入
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。
我的思考
一看到这题立马想到递归,直接按公式写出return,然后超时了。
官方题解
只看了第一种。这个问题其实只需要三个变量,一个和以及两个加数,当新的和产生后,前一个加数就没用了,因此把后一个加数赋值给他,和就变成了第二个加数。
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
let a=0,b=1,c=0;
if(n<2)
{
return n;
}
for(let i=2;i<=n;i++)
{
c=(a+b)%1000000007;
a=b;
b=c;
}
return c;
};
这是一张动态规划的方法。