这篇文章简单介绍了迭代和递归的概念、两者的区别

什么是迭代:

迭代是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
在计算机科学中,迭代是程序中对一组指令(或一定步骤)的重复。

什么是递归:

递归在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。

举个栗子:

我们经常讲的无聊故事《老和尚与小和尚》,就是一个递归

从前有座山,山里有座庙。庙里有个老和尚,正在给小和尚讲故事!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事!故事是什么呢?......’”

还有一个故事《被打死的狗》(这个名字是我自己起的),也是递归

一只狗来到厨房,偷走了一小块面包。厨子举起勺子,把那只狗打死了。于是所有狗都跑来了,给那只狗掘了一个坟墓,还刻了墓志铭,让未来的狗可以看到:“一只狗来到厨房,偷走了一小块面包。厨子举起勺子,把那只狗打死了。于是所有狗都跑来了,给那只狗掘了一个坟墓,还刻了墓志铭,让未来的狗可以看到......”

可见,学好了递归,不仅对编程有帮助,对将来的哄孩子也有帮助,一个故事就能递归到孩子睡着。

在使用递归时,必须要有一个明确的递归结束条件,不然函数会一直运行下去。

迭代和递归的应用上的区别:

迭代的工作过程

利用函数的原值推导出一个新的值

以求解1+2+3+4......+n为例,迭代是这样的:

0+1=1
1+2=3
3+3=6
6+4=10
10+5=15

形状是这样的:

**
**
**
**
**

递归的工作过程

把一个复杂的问题一步步拆分为一个稍微简单的问题,当获得最简单的情况后,再一步步返回,逐步得到复杂问题的解。

以求解1+2+3+4......+n为例,递归的形状是这样的:

sum(5)
5+sum(4)
5+4+sum(3)
5+4+3+sum(2)
5+4+3+2+sum(1)
5+4+3+2+1+sum(0)
5+4+3+2+1+0
5+4+3+2+1
5+4+3+3
5+4+6
5+10
15

形状是这样的:

*
**
***
****
*****
****
***
**
*

迭代和递归,应该选哪个:

使用递归能够使代码更简洁明了,具有较好的可读性。但是递归需要系统堆栈,会消耗很多的系统资源。迭代具有更高的运行效率,系统资源占用少。

所以往往有这样的观点:能不用递归就不用递归,递归都可以用迭代来代替。

既然如此,那么递归是不是就没有存在的必要了。

不是这样的。

从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然。但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初期根本无法实现。因而可以从实际上说,所有的迭代可以转换为递归,但递归不一定可以转换为迭代。

采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。

而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。

所以,究竟是用递归还是用迭代,要根据实际情况来选择。

因为本人水平十分有限,上述内容较多的借鉴了网络。感谢在互联网上无私奉献自己知识和经验的前辈!

python内置函数(2)-递归与迭代的更多相关文章

  1. 【学习笔记】--- 老男孩学Python,day15 python内置函数大全,递归,二分法

    1. lamda匿匿名函数2. sorted()3. filter()4. map()5. 递归函数 一. lamda 匿名函数 为了了解决一些简单的需求⽽设计的⼀句话函数 语法: 函数名 = lam ...

  2. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  3. Python内置函数和内置常量

    Python内置函数 1.abs(x) 返回一个数的绝对值.实参可以是整数或浮点数.如果实参是一个复数,返回它的模. 2.all(iterable) 如果 iterable 的所有元素为真(或迭代器为 ...

  4. python内置函数

    python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...

  5. python 内置函数和函数装饰器

    python内置函数 1.数学相关 abs(x) 取x绝对值 divmode(x,y) 取x除以y的商和余数,常用做分页,返回商和余数组成一个元组 pow(x,y[,z]) 取x的y次方 ,等同于x ...

  6. Python基础篇【第2篇】: Python内置函数(一)

    Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位 ...

  7. [python基础知识]python内置函数map/reduce/filter

    python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...

  8. 那些年,很多人没看懂的Python内置函数

    Python之所以特别的简单就是因为有很多的内置函数是在你的程序"运行之前"就已经帮你运行好了,所以,可以用这个的特性简化很多的步骤.这也是让Python语言变得特别的简单的原因之 ...

  9. Python 内置函数笔记

    其中有几个方法没怎么用过, 所以没整理到 Python内置函数 abs(a) 返回a的绝对值.该参数可以是整数或浮点数.如果参数是一个复数,则返回其大小 all(a) 如果元组.列表里面的所有元素都非 ...

  10. 【转】python 内置函数总结(大部分)

    [转]python 内置函数总结(大部分) python 内置函数大讲堂 python全栈开发,内置函数 1. 内置函数 python的内置函数截止到python版本3.6.2,现在python一共为 ...

随机推荐

  1. 2.7 Structured Regression Models

    $RSS(f)=\sum_i^N \left(y_i-f(x_i)\right)^2$ 当数据量足够大时,数据存在相同$x_i$,不同$y_{il},l=1\cdots t$ 则得到的f即为条件均值$ ...

  2. PSPInstance Object | Web Python

    PSPInstance Object | Web Python The PSPInstance object is available to all PSP pages through the psp ...

  3. redhat6.3 64位更新源(使用网易源)全过程记录

    本篇博客参考:http://chinaxiaoyu.diandian.com/post/2013-01-24/40046529897.首先在浏览器中输入http://tel.mirrors.163.c ...

  4. 几个简单的css设置问题:div居中,ul li不换行 ,内容超出自动变省略号等

    1  div在页面居中的问题 1)position值为relative时(相对定位),css设置属性margin:0 auto;(0 auto,表示上下边界为0,左右则根据宽度自适应相同值,即居中)即 ...

  5. android面试题集1

    Android 面试题(有详细答案) 附带答案,共100分 一.选择题(30题,每题1.5分,共45分) 1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分类,按功 ...

  6. 【SDUT 3038】迷之博弈

    action=showproblem&problemid=3038">[SDUT 3038]迷之博弈 简直就是上次省赛的缩减版... 仅仅只是这个是链 省赛是环. ..1 2先 ...

  7. Redis 命令参考

    Redis 命令参考 http://redis.readthedocs.org/en/latest/index.html

  8. MyEclipse 注册码

    MyEclipse 注册码和大家共享一下! 一:MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller注册码 Subscriber:javp Subscription ...

  9. Effective C++:条款35:考虑virtual函数以外的其它选择

    游戏中的人物伤害值计算问题. (一)方法(1):一般来讲能够使用虚函数的方法: class GameCharacter { public: virtual int healthValue() cons ...

  10. 黑马程序员——java基础之文件复制

    ---------------------- ASP.Net+Unity开发..Net培训.期待与您交流!---------------------- <a href="http:// ...