1、递归函数样例:
def fact(n):
if n==1:
return 1
return n*fact(n-1)
Python默认最多支持1000层递归,可以通过配置最大递归次数来修改,如下:
import sys
sys.setrecursionlimit(1500) # set the maximum depth as 1500
2、上述递归调用栈溢出本可以用尾递归进行优化,但是Python解释器对此不作优化,所以没用。
3、汉诺塔问题,A柱的盘子从上到下依次加大,将A柱所有的盘子移到C柱,可以使用B柱作为中转
def move(n,a,b,c):
if n==1:
print(a,'->',c)
else:
move(n-1,a,c,b)
print(a,'->',c)
move(n-1,b,a,c)
汉诺塔问题用递归方法,思路如下:
move(n---A柱盘子总数,a---盘子所在柱,b---中转柱,c---盘子目标柱)
a.如果A柱只有一个盘子,那么直接从A移到C
b.如果A柱有n个(多于一个)盘子,那么先将A柱上面的n-1个盘子通过C柱中转移到B柱
move(n-1,a,c,b)
c.将A柱的最后一个盘子移到C柱
d.将B柱的n-1个盘子通过A柱中转移到C柱