python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤

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(天)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值