非波那切数列

原始做法---会超时

 

#include <stdio.h>

#include <stdlib.h>



long int fib(n)

{

    if(n <= 1)

        return 1;

    else

        return fib(n-1) + fib(n-2);

}



int main()

{

    int n;

    scanf("%d", &n);

    printf("%ld\n", fib(n));

    return 0;

}


通过保留一个简单的数组,可以大大的减少运行时间避免超时

 

 

#include <stdlib.h>



int a[100] = {0};



long int fib(n)

{

    if(n <= 1)

    {

        a[n] = 1;

        return a[n];

    }

    else

    {

        if(a[n-1] != 0 && a[n-2] != 0)

        {

            a[n] = a[n-1] + a[n-2];

        }

        else if(a[n-1] != 0 && a[n-2] == 0)

        {

            a[n-2] = fib(n-2);

            a[n] = a[n-1] + a[n-2];

        }

        else if(a[n-1] == 0 && a[n-2] != 0)

        {

            a[n-1] = fib(n-1);

            a[n] = a[n-1] + a[n-2];



        }

        else if(a[n-1] == 0 && a[n-2] == 0)

        {

            a[n-1] = fib(n-1);

            a[n-2] = fib(n-2);

            a[n] = a[n-1] + a[n-2];

        }

        return a[n];

    }

}



int main()

{

    int n;

    scanf("%d", &n);

    printf("%ld\n", fib(n));

    return 0;

}


 

 

你可能感兴趣的:(列)