深究递归和迭代的区别、联系、优缺点及实例对比
作者:网络转载 发布时间:[ 2012/8/22 10:29:42 ] 推荐标签:
3、个人总结
? |
定义 |
优点 |
缺点 |
递归 |
程序调用自身的编程技巧称为递归 |
1)大问题化为小问题,可以极大的减少代码量; 2)用有限的语句来定义对象的无限集合.; 3)代码更简洁清晰,可读性更好 |
1)递归调用函数,浪费空间; 2)递归太深容易造成堆栈的溢出; ? |
迭代 |
利用变量的原值推算出变量的一个新值,迭代是A不停的调用B. |
1)迭代效率高,运行时间只因循环次数增加而增加; 2)没什么额外开销,空间上也没有什么增加, |
1)不容易理解; 2)代码不如递归简洁; 3)编写复杂问题时困难。 |
二者关系 |
1)递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。 2)能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出./*相对*/ |
举例如下:
#include <iostream>
using namespace std;
//迭代实现斐波那契数列
long fab_iteration(int index)
{
if(index == 1 || index == 2)
{
return 1;
}
else
{
long f1 = 1L;
long f2 = 1L;
long f3 = 0;
for(int i = 0; i < index-2; i++)
{
f3 = f1 + f2; //利用变量的原值推算出变量的一个新值
f1 = f2;
f2 = f3;
}
return f3;
}
}
//递归实现斐波那契数列
long fab_recursion(int index)
{
if(index == 1 || index == 2)
{
return 1;
}
else
{
return fab_recursion(index-1)+fab_recursion(index-2); //递归求值
}
}
int main(int argc, char* argv[])
{
cout << fab_recursion(10) << endl;
cout << fab_iteration(10) << endl;
return 0;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11