zoukankan      html  css  js  c++  java
  • 递归和迭代区别

    借用别人图说:

     

    定义

    优点

    缺点

    递归

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

    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;
    }
  • 相关阅读:
    2017-5-16
    2017-3-6 Develop Engineer 面试
    2017 3-4/5 两天的学习的REVIEW
    2017-3-2 C# WindowsForm 中label标签居中显示
    css图片响应式+垂直水平居中2
    flash上传在spring mvc中出现的问题2
    avalon js实现拖动图片排序
    css图片响应式+垂直水平居中1
    flash上传在spring mvc中出现的问题1
    mybatis Result Maps对结果分组3--一对多使用limit
  • 原文地址:https://www.cnblogs.com/siichen/p/4719725.html
Copyright © 2011-2022 走看看