在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数(recursion)。
>>> def recursion(): return recursion() >>> recursion() Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return recursion() …… …… …… #如果直接返回函数本身,函数会一直循环下去,直到内存溢出,所以通常情况下要限制递归的次数 >>> import sys >>> sys.setrecursionlimit(10000) #将递归限制为10000次
为了学习递归,首先尝试用非递归的方法写一个函数,求5的阶乘,即是1*2*3*4*5。
>>> from functools import reduce >>> reduce(lambda x,y:x*y,[1,2,3,4,5]) 120 #用reduce可以轻松实现
在写个递归版本,加深对递归的理解
>>> def recursion(n): if n == 1: return 1 else: return n * recursion(n-1) >>> recursion(5) 120
拆解帮助理解:
recursion(5) = 5*recursion(4*recursion(3*recursion(2*recursion(1))))
recursion(4) = 4*recursion(3)
recursion(3) = 3*recursion(2)
recursion(2) = 2*recursion(1)
recursion(1) = 1*1
recursion(5) = 5*4*3*2*1 = 120