斐波那契函数的优化

Fib(n)

{

 F[0]=0;F[1]=1;

 

for(int i=2;i<=n;i++)

F[i]=F[i-1]+F[i-2];

 

return F[n];

}

比较经典的算法之一,就是上面的伪码。

可是我们仔细研究就会发现,如果我们要求Fib(10000)的值,就会产生一个很长的数组,而我们最后返回的

是数组的最后一个数。如果n的值是指数级的话,比如求 n=2^64 对应的斐波那契函数值的话,将会产生一个

多么长的数组。

但是我们真的需要这么长的数组吗?

下面是数组存放的值

0 1 1 2 3 5 8 13 21 34 55 ...

也就是如果我们求第n个斐波那契函数值,只需要求前两个斐波那契函数值,就行了!

这样的话,在求第n个数的时候,n-3,n-4,n-5...这些数就已经没有用了!

这样我们也就没有必要在数组里面保存这些数了

那么,用长度为3的数组就可以求任意大的斐波那契数了!具体算法如下:

int Fib(int n)

{

F[0]=0;F[1]=1;

for(int i=2;i<=n;i++)

F[i%3]=F[(i-1)%3]+F[(i-2)%3];

return F[n%3];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值