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