給出如下遞推式:
以上就是經典的Fibonacci數列,下面給出遞推的解法:
int Fibonacci(int n)
{
if(n<=0)
return 0;
else if(n==1)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
int Fibonacci(int n)
{
if(n<=0)
return 0;
else if(n==1)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
我們知道 ,以上的解法每個F(n)計算了2次,我們能不能只計算一次,做一個緩存,當然是可以的。如下:
int tmp1=1;//臨時變量,保存中間結果
int tmp2=0;
int tmp;
int Fibonacci(int n)
{
int F;
for(int i=2;i<=n;++i)
{
tmp=tmp1+tmp2;
tmp2=tmp1;
tmp1=tmp;
}
return tmp;
}
int tmp1=1;//臨時變量,保存中間結果
int tmp2=0;
int tmp;
int Fibonacci(int n)
{
int F;
for(int i=2;i<=n;++i)
{
tmp=tmp1+tmp2;
tmp2=tmp1;
tmp1=tmp;
}
return tmp;
}
以上采用了循環的方法,時間復雜度加快了。