关于迭代与递归的补充

递归

大家有没有想我的Python呢?这几天挖粽子,挖到自闭,还好挖到一个,大家快去补天挖粽子吧!我知道这是废话。连Python都不会挖什么粽子。那不还赶快学起。这是函数的最后一章,下一章《字典》快点学习吧,开始我们的笔记

等等,差点忘记了,为了赶时间,我只能舍弃无关的图片,但又要保障大家的质量。

一边看视频一边看笔记吧,后台回复8523获取教程视频让你们零消费,学会Python。

递归是神马

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”。这个故事永远也讲不完,因为没有递归结束条件。老师讲递归时总是说,递归很简单,一个递归结束条件,一个自己调用自己。如果递归没有结束条件,那么就会无限递归下去。在编程的时候,没有递归结束条件或者递归过深,一般会造成栈溢出。 网络

怎么样理解了吗?有的同学对迭代也不了解,这里也提一下

迭代算法是用计算机解决问题的一种基本方法。 它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。为什么使用迭代而不用递归呢?很明显,使用递归时每调用一次,就需要在栈上开辟一块空间,而使用迭代就不需要了,因此,很多时候设计出了递归算法,还要想法设法修改成迭代算法。 网络

这样的解释懂了吧。

递归从原理上来讲就是不断地调用自身的一个行为,迭代就是重复同一个操作的,并从原有的值变成新值

例子

>>> def number():
...     number()
...
>>> number()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in number
  File "<stdin>", line 2, in number
  File "<stdin>", line 2, in number
  File "<stdin>", line 2, in number

它会不断地重复,直到耗尽所有资源。Python出于保护防止把它玩坏,最高叠加是100层。

实例

写一个求阶乘的函数

首先你要知道什么是阶乘,如果输入一个数如5,1x2x3x4x5=120,120就是5的阶乘。

普通版本

>>> def recursion(n):
...     result = n
...     for i in range(1,n):
...             result *= i
...     return result
...
>>> recursion(5)
120

递归版本

>>> def factorial(n):
...     if n == 1:
...             return 1
...     else:
...             return n * factorial(n - 1)
...
>>> factorial(5)
120
>>>

原文发布于微信公众号 - 渗透云笔记(shentouyun)

原文发表时间:2019-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券