题目:
代码:
递归法:
#include<stdio.h>
long long n,m;
int Fibbonacci(int n)
{
if(n==1) return 1;
if(n==2) return 1;
else return Fibbonacci(n-1)+Fibbonacci(n-2);
}
int main()
{
while(~scanf("%lld",&m))
{
if(m==-1)
break;
else
printf("%lld\n",Fibbonacci(m));
}
return 0;
}
Memory Limit Exceeded!
Memory Limit Exceeded!
Memory Limit Exceeded!
由于递归当n大于37左右后计算机运算基本会慢了很多 很多
原因就是递归会导致找地址的时间指数倍增加... ...(猜测的)
所以当数据比较大的时候尽量避免复杂的递归算法
正确代码:
#include<stdio.h>
long long a[50]={1,1},i,n;
void Fib(void)
{
for(i=2;i<50;i++)
{
a[i]=a[i-1]+a[i-2];
}
}
int main()
{
Fib();
while(~scanf("%lld",&n))
{
if(n==-1)
break;
printf("%lld\n",a[n-1]);
}
return 0;
}