汉诺塔——python

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

image.png

python解决方式

def move(n,a,b,c):
    if n==1:
        print(a+'-->'+c)
    else :
        move(n-1,a,c,b)
        move(1,a,b,c)
        move(n-1,b,a,c)
move(3,'A','B','C')

附上我个人理解

把每个柱子上的圆盘不考虑个数,只分为2部分 
part1:最底下————1
part2:除最底下的其他圆盘———— n-1
不管怎么移动,我们都是先把part2(n-1)从a移到b
这样才可以把part(1)从a移到c
最后把part2(-1)从b移到c
当有两个圆盘时
顺序为
A->B
A->C
B->C
所以为了print(a+'-->'+c)为以上顺序
move(1,a,c,b) print 的就是  A->B
move(1,a,b,c) print 的就是  A->C
move(1,b,a,c) print 的就是  B->C
当有3个圆盘时
顺序为
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
move(2,a,c,b)  不print
move(2,a,c,b)  继续执行 
move(1,a,b,c)  print 的就是  A->C
move(1,a,c,b)  print 的就是  A->B
move(1,c,a, b) print 的就是  C->B
move(1,a,b,c)  print 的就是  A->C
move(2,b,a,c)  不print
move(2,b,a,c)  继续执行 
move(1,b,c,a)  print 的就是  B->A
move(1,b,a,c)  print 的就是  B->C
move(1,a,b,c)  print 的就是  A->C
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容