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;
    }
  • 相关阅读:
    [考试反思]0511省选模拟93:平衡
    [考试反思]0509省选模拟92:警示
    [考试反思]0508省选模拟91:小雨
    [考试反思]0507省选模拟90:信任
    [考试反思]0506省选模拟89:无事
    [专题总结]2-sat及题目&题解(3/5 complete)
    [考试反思]0505省选模拟88:滑稽
    [考试反思]0504省选模拟87:开花
    [考试反思]0502省选模拟86:恐惧
    [考试反思]0501省选模拟85:低落
  • 原文地址:https://www.cnblogs.com/siichen/p/4719725.html
Copyright © 2011-2022 走看看