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