在数学上,斐波那契数列是以递归的方法来定义:
F0 = 0
F1 = 1
Fn = F(n-1) + F(n-2) n≧2
求契波那切数列的第N项
递归:
function Fibo(n){
if(n<=0){return 0;}
else if(n==1){return 1;}
else return Fibo(n-1)+Fibo(n-2);
}
es6:
let fib = n => n > 1 ? fib(n-1) + fib(n-2) : n;
function F(index){
if(index <= 0) return 0
let fa = [];
[fa[0], fa[1]] = [1, 1]
for(let i = 2; i
fa[i] = fa[i-1] + fa[i-2]
}
return fa[index-1]
}
循环:
function Fibo(n) {
if(n<=0) {return 0;}
if(n==1){return 1;}
let a1= 1;
let a2=1;
for(let i = 2; i <= n; i++) {
[a1,a2] = [a2,a1+a2]
}
return a2;
}
Generator函数
function* fibo(){
let [current,next]=[0,1];
while(true){
[current,next]=[next,current+next];
yield next;
}
}
优化:缓存
var memory= function(func){
var memo = [];
if(memo[n]==undefined){memo[n] = func(n)}
return memo[n];
}
var fibo = memory (function(n){
if(n<=0){return 0;}
if(n==1){return 1;}
return fibo(n-2)+fibo(n-1);
})
获取契波那切数列的前N项