斐波那契数列
学习动态规划的时候见到了一个词语 叫做记忆化搜索 用于递归的剪枝 用空间的增大来换取时间的压缩 
下面是关于斐波那契数列的代码例子 
 
传统递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | #include <iostream>
  using namespace std;
  int f(int n){    if(n==0) return 0;    if(n==1) return 1;    return f(n-1)+f(n-2); }
  int main(){    int n;    cin>>n;    cout<<f(n);    return 0; }
   | 
 
传统递归的弊端就是会重复计算 例如我要计算f(5)=f(4)+f(3) 计算f(4)的时候又要在计算一遍f(3) 因此采用记忆化搜索来防止这些重复计算来提高速度
记忆化递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | #include <iostream> #include <vector> using namespace std; const int MAX=100; vector<int> dp(MAX,-1); int f(int n){     if(dp[n]!=-1) return dp[n];     else{     	dp[n]=f(n-1)+f(n-2);     	return dp[n]; 	} } int main(){     int n;     dp[0]=0;dp[1]=1;     cin>>n;     cout<<f(n)<<endl;     for(int i=0;i<=n;++i) cout<<"dp["<<i<<"]="<<dp[i]<<endl;     return 0; }
   | 
 
经过测试 例如输入f(44)计算的时候 记忆化搜索的速度明显比传统递归的速度要快的多
其他方法
我在查阅资料的时候发现很多人说还能再提升速度 使用矩阵乘法的方式 有时间我会更新此篇文章 加上速度更快的方法