Python实现汉诺塔问题

汉诺塔小游戏

规则:一共有三个柱子A,B,C,每个柱子上可以套多个圆盘,大圆盘必须在下,小圆盘在上,所有圆盘在这三个柱子之间移动,一次只能移动一个圆盘,最终实现将所有A柱上N个的圆盘移动到C柱上。
hano1.png

思路:先将除最大盘子以外的所有圆盘移动到B柱,再将最大的盘子移动到C柱,最后将剩余所有圆盘移动到C柱。

实现:递归思想

  1. 要实现将N个圆盘从A柱移动到C柱,首先需要将N-1个圆盘移动到B柱上,那么就可以将这N-1个圆盘想象成一个整体,移动(A,B,C)的位置为(A,C,B),这个整体要实现的就是将N-1个圆盘从A移动到B;
    hano2.png
  2. 要实现将N-1个圆盘从A移动到B,就需要先将上面N-2个圆盘移动到C柱,再将第N-1个圆盘移动到B柱,再将N-2个圆盘移动到B柱上,就实现了第一步将N-1个圆盘移动到B柱上;
  3. 那么,如何将上面N-2个圆盘移动到C柱呢,只需要将这N-2个圆盘想象成一个整体,移动圆盘位置为(A,B,C),利用上述方法,重复实现
'''汉诺塔小游戏'''
i = 0
def hanno(n, a, b, c):
    global i
    i +=1
    if n == 1:
        print(a, '->', c)
        return
    else:
        hano(n-1, a, c, b)    # 将n-1个圆盘从a移动到b
        print(a, '->', c)     # 将第n个圆盘从a移动到c
        hano(n-1, b, a, c)    # 将剩余n-1个圆盘从b移动到c

num = int(input('>>请输入汉诺塔层数:'))
hano(num, 'A', 'B', 'C')
print(f'一共移动了{i}次')
posted @ 2021-03-09 16:41  酸萝卜别吃  阅读(141)  评论(0编辑  收藏  举报