您的位置:首页 > 编程语言 > Python开发

汉诺塔,python递归实现解法步骤

2017-08-28 00:00 507 查看
def hanoi(n,x,y,z):#函数实现n个盘子在x,y,z,移动

if n==1:
print(x, ' --> ', z)
else:
hanoi(n-1,x,z,y)#将n-1层个盘子从x移动到y上
print(x, ' --> ', z)#将最底下的盘子移动到z上
hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上
hanoi(4,'X','Y','Z')# 调用函数输出步骤

def bushu(m): #函数实现m个盘子进行移动需要的步数
a1 = 1
if m==1:
#print(1)
return 1
else:
for i in range(2,m+1):
a2 = a1*2 + 1
a1 = a2
#print (a2)
return a2

i = 1
j = 1
while i< 60*60*24*365:  #如果每一秒移动一次,一年之内可以实现多少个盘子的汉诺塔游戏
bushu(j)
i = bushu(j)
print (i,j)
j += 1

程序运行后输出结果

#下面是4层的移动步骤,相应的改变n的值就可以

X  -->  Y
X  -->  Z
Y  -->  Z
X  -->  Y
Z  -->  X
Z  -->  Y
X  -->  Y
X  -->  Z
Y  -->  Z
Y  -->  X
Z  -->  X
Y  -->  Z
X  -->  Y
X  -->  Z
Y  -->  Z
#下面输出的内容,左边是步数,右边是层数
步数  层数
1 1
3 2
7 3
15 4
31 5
63 6
127 7
255 8
511 9
1023 10
2047 11
4095 12
8191 13
16383 14
32767 15
65535 16
131071 17
262143 18
524287 19
1048575 20
2097151 21
4194303 22
8388607 23
16777215 24
33554431 25

可以看到,当层数达到25层的时候,需要33554431步,也就是说你不眠不休,一点24小时的移动汉诺塔,一秒移动一步,需要388天,下面是计算公式:

33554431/60/60/24 =388.3614699074074(天)一年多一点

当然每增加一层都是一数量级的倍数增加的

例如说,26层就可能需要你388*2=776(天)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汉诺塔 递归 python