斐波那契数列的递归、递推算法比较
2013-04-16 15:24
344 查看
公式: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得到。
网上找到的一个最简单例子,修改了两个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得到。
相关文章推荐
- 斐波那契数列——递归实现
- 斐波那契数列和二分查找的算法(递归与非递归)
- 斐波那契数列之递归、循环
- 斐波那契数列递归与非递归算法
- 斐波那契数列的递归实现和非递归实现
- 斐波那契数列算法——递归与非递归
- 斐波那契(Fibonacci)数列的递归和非递归实现
- 斐波那契数列之递归
- 斐波那契数列的递归与非递归实现
- 斐波那契数列的递归和非递归解法
- Fibonacci(斐波那契)数列的递归与非递归实现 python
- 斐波那契数列(Fibonacci)(递归,非递归)(动态规划,自顶向下,自底向上)
- OJOJ:斐波那契数列的实现——递归与非递归实现
- 斐波那契数列递归与非递归实现(JAVA语言描述)
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 斐波那契数列-递归
- 递归思想斐波那契数列变形
- HDU -2018 母牛的故事&&斐波那契兔子数列(函数递归)
- 斐波那契数列数组递推,普通递归,记忆化搜索,矩阵快速幂,和公式法
- 非递归实现斐波那契数列———修改版