|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。
看来计算时候还需要具体问题具体分析,递归是好方法,但是不适用所有问题,有些时候还是数学方法能够“优雅”的求解 |
评分
-
查看全部评分
|