Problem Description
The Fibonacci Numbers{0,1,1,2,3,5,8,13,21,34,55…} are defined by the recurrence:
F0=0,F1=1,Fn = Fn - 1 + Fn - 2,n >= 2
Write a program to calculate the Fibonacci Numbers.
Input
Each case contains a number n and you are expected to calculate Fn.(0 <= n <= 30) 。
Output
For each case, print a number Fn on a separate line,which means the nth Fibonacci Number.
Sample Input
1
Sample Output
1
原题链接
解题思路
- 状态转移方程:dp[i] = dp[i - 1] + dp[i - 2]
代码实现(C++)
#include <iostream>
using namespace std;
#define maxn 31
int n;
int dp[maxn];
int getDp(int n) {
if (n == 0 || n == 1)
return dp[n];
if (dp[n] == -1)
dp[n] = getDp(n - 1) + getDp(n - 2);
return dp[n];
}
int main() {
for (int i = 0; i < maxn; i++)
dp[i] = -1;
dp[0] = 0;
dp[1] = 1;
while (~scanf("%d", &n))
printf("%d\n", getDp(n));
return 0;
}