递归和迭代区别

借用别人图说:

 

定义

优点

缺点

递归

程序调用自身的编程技巧称为递归

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;
}
原文地址:https://www.cnblogs.com/siichen/p/4719725.html