递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数(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

 

posted @ 2016-03-14 23:07  林间  阅读(198)  评论(0编辑  收藏  举报