杭电ACM-2070(Fibbonacci数列与递归的选择)

题目:

杭电ACM-2070(Fibbonacci数列与递归的选择)_第1张图片
2070题

代码:
递归法:

#include
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
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;
}

你可能感兴趣的:(杭电ACM-2070(Fibbonacci数列与递归的选择))