鱼C论坛

 找回密码
 立即注册
查看: 1621|回复: 0

[技术交流] Python24-汉诺塔笔记

[复制链接]
发表于 2017-7-24 14:08:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a=0
def hanoi(n,x,y,z):
    global a
    if n==1:
        a+=1
        #print(x,'-->',z)
    else:
        hanoi(n-1,x,z,y) #N-1盘子从X移动到Y 
        a+=1
        #print(x,'-->',z)
        hanoi(n-1,y,x,z) #N-1盘子从Y移动到Z

#n=int(input('input n:'))

hanoi(22,'A','B','C')
print (a)
学习这一讲有一个不理解的地方,后来想明白了,分享一下
#N-1盘子从X移动到Y 和  #N-1盘子从Y移动到Z ,为什么是n-1,x,z,y 和 n-1,y,x,z
原函数n,x,y,z,是 将N个盘子从X,通过Y过度,移动到Z ,也就是 后3个参数中,第一个 是出发的位置,第二个是 过度的位置,第三个是目标位置
所以,N-1 从X 移动到Y ,是n-1,从X,经由Z,到达Y,也就是n-1,x,z,y
同理, n-1,y,x,z 就是 从Y出发,经由X,到达Z

延伸:
想要算一下 64个盘子 用递归需要多少步能移动完毕,计算时间非常长
百度了一下,这个其实是 2^n -1

假如每秒钟一次,共需多长时间呢?一个平年365天有31536000 秒,闰年366天有31622400秒,平均每年31556952秒,计算一下:
18446744073709551615秒
这表明移完这些金片需要5845.54亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845.54亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。


看来计算时候还需要具体问题具体分析,递归是好方法,但是不适用所有问题,有些时候还是数学方法能够“优雅”的求解

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表