• 递归和迭代区别


    借用别人图说:

     

    定义

    优点

    缺点

    递归

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

    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;
    }
  • 相关阅读:
    Java 装箱、拆箱 包装器
    Oracle decode函数 除数为零
    Java并发编程之ConcurrentHashMap
    MessageDigest 类
    Java中关于OOM的场景及解决方法
    Memcached的一些知识
    Solr导入数据库数据
    前端学习笔记(zepto或jquery)——对li标签的相关操作(二)
    前端学习笔记(zepto或jquery)——对li标签的相关操作(一)
    DES加密深度优化——随机生成加密字符串
  • 原文地址:https://www.cnblogs.com/siichen/p/4719725.html
Copyright © 2020-2023  润新知