递归
大家有没有想我的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
>>>