#include<stdio.h> int fib(int a); int fib_arr(int a, int *arr); /** * 有一只兔子,从出生后第3个月起每个月都生一只兔子, * 小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少? */ int main(int argc, char const *argv[]) { int num = 0; int array[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1}; while (scanf("%d", &num) != EOF) { printf("%d\n", fib_arr(num, array) ); // printf("%d\n", fib(num) ); } return 0; } int fib(int a){ if (a == 0) return 0; else if (a == 1) return 1; else if(a == 2) return 1; else return fib(a-1) + fib(a-2); } int fib_arr(int a, int *arr){ if (a == 0){ arr[a] = 0; return 0; } else if (a == 1){ arr[a] = 1; return 1; } else if(a == 2){ arr[a] = 1; return 1; } else{ if (arr[a] != -1) { return arr[a]; } return arr[a] = fib(a-1) + fib(a-2); } }