非波那切数列

原始做法---会超时

 

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


 

 

posted @ 2013-06-12 17:41  jlins  阅读(332)  评论(0编辑  收藏  举报