自学Python:汉诺塔游戏

作者: 小强聊成长 | 来源:发表于2022-03-02 14:02 被阅读0次

    汉诺塔问题是一个古典的数学问题,它只能用递归方法来解决。

    在古代有一个梵塔,塔内有A、B、C三个座。

    开始时A座上有64个盘子,盘子大小不同,但保证大的在下,小的在上。

    现在有一个和尚想将这64个盘子从A座移动到C座,但他每次只能移动一个盘子,且在移动过程中在3个座上都必须保持大盘在下小盘在上的状态。

    在移动过程中可以利用B座。

    那么问题来了,用程序将移动步骤打印出来。

    下面直接上代码:

    ########################

    def hanluota(N, A, B, C):

        if N == 1:  # 将A座上剩下的第N个盘子移动到C座上

            print("移动第 %d 个盘子从 %c 到 %c " %(N, A, C)) # 打印移动步骤

        else:

            hanluota(N-1, A, C, B) # 借助C座将N-1个盘子从A座移动到B座

            print("移动第 %d 个盘子从 %c 到 %c " %(N, A, C))  # 打印移动步骤

            hanluota(N-1, B, A, C)

    if __name__ == "__main__":

        #输入要移动的盘子个数

        n = int(input("请输入要移动的盘子总数:"))

        hanluota(n, 'A', 'B', 'C'); # 调用递归函数

    ########################

    执行结果如下:

    请输入要移动的盘子总数:5

    移动第 1 个盘子从 A 到 C

    移动第 2 个盘子从 A 到 B

    移动第 1 个盘子从 C 到 B

    移动第 3 个盘子从 A 到 C

    移动第 1 个盘子从 B 到 A

    移动第 2 个盘子从 B 到 C

    移动第 1 个盘子从 A 到 C

    移动第 4 个盘子从 A 到 B

    移动第 1 个盘子从 C 到 B

    移动第 2 个盘子从 C 到 A

    移动第 1 个盘子从 B 到 A

    移动第 3 个盘子从 C 到 B

    移动第 1 个盘子从 A 到 C

    移动第 2 个盘子从 A 到 B

    移动第 1 个盘子从 C 到 B

    移动第 5 个盘子从 A 到 C

    移动第 1 个盘子从 B 到 A

    移动第 2 个盘子从 B 到 C

    移动第 1 个盘子从 A 到 C

    移动第 3 个盘子从 B 到 A

    移动第 1 个盘子从 C 到 B

    移动第 2 个盘子从 C 到 A

    移动第 1 个盘子从 B 到 A

    移动第 4 个盘子从 B 到 C

    移动第 1 个盘子从 A 到 C

    移动第 2 个盘子从 A 到 B

    移动第 1 个盘子从 C 到 B

    移动第 3 个盘子从 A 到 C

    移动第 1 个盘子从 B 到 A

    移动第 2 个盘子从 B 到 C

    移动第 1 个盘子从 A 到 C

    ________________END______________

    相关文章

      网友评论

        本文标题:自学Python:汉诺塔游戏

        本文链接:https://www.haomeiwen.com/subject/xacahrtx.html