【路飞】 《剑指 Offer》10- I. 斐波那契数列 js

177 阅读1分钟

上题:

写一个函数,输入 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

斐波那契数列问题的由来

假设一对初生兔子要一个月才到成熟期,而一对成熟兔子每月会生一对兔子,那么,由一对初生兔子开始,12 个月后会有多少对兔子呢?

image.png

按照上图,兔子问题得以解决,答案为144对。以上数列,即“斐波那契数列”。

第一项和第二项是1,之后的每一项为之前两项的和。即: a1=a2=1

解法1:递归法

var fib = function(n) { 
if(n < 1) return 0 ; 
else if(n <=2 ) return 1; 
return (fib(n-1) + fib(n-2))% (1e9 + 7); 
}

解法2:

var fib = function(n) { 
if(n < 1) return 0 ; 
else if(n <=2 ) return 1; 
let temp = 1; let temp1 = 1; let result;
for(let i = 3; i<= n;i++){
result = (temp+temp1) % (1e9 + 7); 
temp = temp1; 
temp1 = result; 
} 
return result;
};