借用别人图说:
|
定义 |
优点 |
缺点 |
递归 |
程序调用自身的编程技巧称为递归 |
1)大问题化为小问题,可以极大的减少代码量; 2)用有限的语句来定义对象的无限集合.; 3)代码更简洁清晰,可读性更好 |
1)递归调用函数,浪费空间; 2)递归太深容易造成堆栈的溢出;
|
迭代 |
利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B. |
1)迭代效率高,运行时间只因循环次数增加而增加; 2)没什么额外开销,空间上也没有什么增加, |
1)不容易理解; 2)代码不如递归简洁; 3)编写复杂问题时困难。 |
二者关系 |
1)递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。 2)能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出./*相对*/
|
举例:
递归(折半查询)
int
Find(
int
*ary,
int
index,
int
len,
int
value)
{
if
(len==1)
//最后一个元素
{
if
(ary[index]==value)
return
index;
//成功查询返回索引
return
-1;
//失败,返回-1
}
//如果长度大于1,进行折半递归查询
int
half=len/2;
//检查被查值是否大于上半部分最后一个值,如果是则递归查询后半部分
if
(value>ary[index+half-1])
return
Find(ary,index+half,half,value);
//否则递归查询上半部分
return
Find(ary,index,half,value);
}
迭代:经典例子就是实数的累加,比如计算1-100所有实数的和。
int
v=1;
for
(i=2;i<=100;i++)
{
v=v+i;
}