递归函数

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柱

 

posted on 2017-05-07 17:38  vonkimi  阅读(101)  评论(0编辑  收藏  举报

导航