兔子生兔子的魔鬼数列
使用递归算法可以解决生多少兔子的这个问题,但是空间复杂度很大。
所以进行算法优化
Fib(int n)
{
int i,s1,s2;
if(n<1)
return -1;
if(n==1||n==2)
return 1;
s1=1;
s2=2;
for(i=3;i<n:i++)
{
s2=s1+s2;//辗转相加法
s1=s2-s1;//记录前一项
}
return s2;
}
这样时间复杂度O(n),而且不会爆内存。
解决方法就是:这个题的解决思路就是最后的一个得数是去年和前年的加和,所以一直记录去年和前年的值就好,然后一直更新这个数据,就不会导致递归造成的爆内存现象了。