美文网首页
杭电ACM-2070(Fibbonacci数列与递归的选择)

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

作者: 1QzUPm_09F | 来源:发表于2017-01-23 21:53 被阅读0次

    题目:

    2070题

    代码:
    递归法:

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

    相关文章

      网友评论

          本文标题:杭电ACM-2070(Fibbonacci数列与递归的选择)

          本文链接:https://www.haomeiwen.com/subject/ebzabttx.html