避免递归中的重复计算

来源:互联网 发布:斧声烛影 知乎 编辑:程序博客网 时间:2024/05/20 12:48
int Fib_1(int n) //斐波那契数列
{
if(n<=1){return 1;}else{return Fib_1(n-2)+Fib_1(n-1);}}






但是在多次计算后重复的值仍然重复计算。为了加快计算速度,采用添加一个数组保存之前重复出现的递归结果的数组。


int Count_Fib(int n,int *val){if(val[n] != -1){return val[n];}else{val[n] = Count_Fib(n-1,val)+Count_Fib(n-2,val);return val[n];}}void Fib_2(int n){int *val = new int[n+1];for(int i = 0;i<=n;i++){val[i]=-1;//因为数字不会是负数}val[0]=1;val[1]=1;cout<<Count_Fib(n,val)<<endl;}



接下来不用数组,传两个参数。


int Fib(int a,int b,int n){if(n<=2)return a;else return Fib(a+b,a,n-1);}int Fib(int n){int a=1,b=1;return Fib(a,b,n);}





0 0