1 /*
2 斐波那契的递归实现和记忆化思想
3 在动态规划中,常常会涉及斐波那契数列
4 下面介绍斐波那契的循环打表,递归的实现、打表
5 借鉴自《挑战程序设计竞赛》
6 */
7 #include<iostream>
8 using namespace std;
9 const int maxn = 40;
10 int f[maxn+5];
11 /*
12 void fib(int n)//循环打表
13 {
14 f[1] = f[2] = 1;
15 for(int i=3; i<=n; ++i)
16 f[i] = f[i-1] + f[i-2];
17 }
18 int fib(int n)//递归实现
19 {
20 if(n <= 1) return n;// f[1] = 1;f[2] = 1;
21 return fib(n-1) + fib(n-2);
22 }*/
23 int fib(int n)//通过数组f记录已经算过的fib
24 {
25 if(n <= 1) return n;
26 if(f[n] != 0) return f[n];
27 return f[n] = fib(n-1) + fib(n-2);
28 }
29 int main()
30 {
31 for(int i=1; i<=maxn; ++i)
32 cout << fib(i) << " ";
33 cout << endl;
34 }