递归函数
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柱
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步