契波那切数列 php,斐波那契数列 memo优化

在数学上,斐波那契数列是以递归的方法来定义:

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项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值