非波那切数列
原始做法---会超时
#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; }