思路:三个柱子X,Y,Z,有N个盘子在X上,要将N个盘子搬到Z上,首先要将N-1个盘子搬到Y上,再将第N个盘子从X搬到Z上,再将Y上的N-1个盘子搬到Z上
次数:
1个盘子:要搬1次
2个盘子:要搬3次
3个盘子:要搬7次
.
.
.
n个盘子:要搬2F(n-1)+1次
def hannota(n,x,y,z):
if n==1:
print x, '-->' ,z
else:
hannota(n-1,x,z,y)#将1个盘子从x移动到y上
print x, '-->' ,z #将叠底下的盘子从x移动到z上
hannota(n-1,y,x,z)#再将y上的n-1个盘子移动到z上
n=int(input("请输入汉诺塔的层数:"))
hannota(n,'x','y','z')
次数:
def count_hannota(n):
if n==1:
return n
else:
return (2*count_hannota(n-1)+1)
如果将汉诺塔上的每个盘子由上往下依次标个序号1,2,3,…,n-1,n
def hannota(n,x,y,z,i):
if n==1:
print x, '-->' ,z, i
else:
hannota(n-1,x,z,y,i-1)#将1个盘子从x移动到y上
print x, '-->' ,z, i #将叠底下的盘子从x移动到z上
hannota(n-1,y,x,z,i-1)#再将y上的n-1个盘子移动到z上
#搬运次数:
def count_hannota(n):
if n==1:
return n
else:
return (2*count_hannota(n-1)+1)
n=int(input("请输入汉诺塔的层数:"))
i=n
t=count_hannota(n)
print("过程: 盘子序号 ")
hannota(n,'x','y','z',i)
print("总共需要搬运%d次"%t)