解决汉诺塔问题

Posted hwb-znnsyw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决汉诺塔问题相关的知识,希望对你有一定的参考价值。

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

汉诺塔问题的解决思路:如果我们要思考每一步怎么移可能会非常复杂,但是可以将问题简化。我们可以先假设除a柱最下面的盘子之外,已经成功地将a柱上面的63个盘子移到了b柱,这时我们只要再将最下面的盘子由a柱移动到c柱即可。

动图技术图片

 

def hano(n,x,y,z):
    if n==1:
        print(x,"->",z)
    else:
        #将n-1个盘子从x->y
        hano(n-1,x,z,y)
        #将剩余的最后一个盘子从x->z
        print(x,"->",z)
        #将剩余的n-1个盘子从y->z 
        hano(n-1,y,x,z)

n = int(input("请输入汉诺塔的层数:"))

hano(n,"A","B","C")

 

技术图片 

以上是关于解决汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章

2019.1.8兔子问题和汉诺塔问题的解决代码

Python学习Python解决汉诺塔问题

递归解决汉诺塔问题

从汉诺塔问题来看“递归”本质

算法题06-用栈来解决汉诺塔问题

解决汉诺塔问题