公式:F(n+1)=F(n)+F(n-1), F(0)=F(1)=1
网上找到的一个最简单例子,修改了两个bug
// 递归算法
int F1(int n)
{
if (n < 2)
return 1;
else
return F1(n-1)+F1(n-2);
}
// 递推算法
int F2(int n)
{
if (n < 2)
return 1;
int f0=1, f1=1, f;
for (int i=0; i<n-1; i++)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}
两个算法功能相同,简单总结一下
递归:算法简单,但是效率较低,因为要入栈、出栈,并且容易造成堆栈溢出。
递推:算法较复杂,但是效率比较高。
Intel T7250/2.45GB内存/XP系统/VC6 Debug版本程序/测试循环100万次耗时:F1 4390ms F2 72ms
Release版本耗时:F1 1390ms F2 21ms
从上面数据也可以看出来Release比Debug代码的确优化不少。
注:考虑到时钟的误差,上面F2函数的数据实际上是循环1亿次的数据除以100得到。