深究递归和迭代的区别、联系、优缺点及实例对比
作者:网络转载 发布时间:[ 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;
}

sales@spasvo.com