原始做法---会超时

 

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