4.8 函数之递归三
汉诺塔游戏的算法
递归求解汉诺塔:
有64的圆盘在一根针上,每次只能移动一片,并且小的圆盘必须在大的圆盘之上,有三根针,使用算法讲64个圆盘移动到另外一个
#对于游戏的可以简单的分解为三个步骤:
1)将前63个盘子从X移动到Y上,
2)将最底下的第63个盘子从X移动到Z上
3)将Y上的63个盘子移动到Z上
继续将问题分解:
问题一:将X上的63个盘子借助Z移到Y上
问题二:将Y上的63个盘子借助X移到Z上
这样每一个问题都可以拆解为:
问题一:将X上的63个盘子借助Z移到Y上-->拆解为
1)将前62个盘子从X移动到Y上,
2)将最底下的第62个盘子从X移动到Z上
3)将Y上的62个盘子移动到Z上
问题二:将Y上的63个盘子借助X移到Z上
1)将前62个盘子从X移动到Y上,
2)将最底下的第62个盘子从X移动到Z上
3)将Y上的62个盘子移动到Z上
这种使用递归的方法就变得很简单易懂
def hanoi(n,x,y,z): #注意:y是辅助,Z是目标,所以hanoi(n,x,z,y)则y是目标,z是辅助
if n == 1:
print(x,'-->', z)
else:
hanoi(n-1,x,z,y)#将前n-1个盘子从X移动到Y上
print(x,'-->',z) #将最底下的第n个盘子从x移动到z上
hanoi(n-1,y,x,z)#将Y上的n-1个盘子移动到Z上
n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'X','Y','Z')
欢迎大家关注!!