汉诺塔

匿名 (未验证) 提交于 2019-12-02 23:55:01

''' 问题:     有三个柱子A、B、C。移动n个盘子从 A -> C 分析:     步骤1: 移动前n-1个盘子 A -> B     步骤2: 移动第n个盘子 A -> C     步骤3: 移动前n-1个盘子 B -> C 实验:     (n个盘子从上到下编号:1, 2, 3,...,n)     n=2:         move 1 A -> B  步骤1:移动前n-1个盘子 A -> B         move 2 A -> C  步骤2:移动第n个盘子到 A -> C         move 1 B -> C  步骤3:移动前n-1个盘子 B -> C     n=3:         move 1 A -> C         move 2 A -> B         move 1 C -> B  移动前n-1个盘子 A -> B         move 3 A -> C  移动第n个盘子到 A -> C         move 1 B -> A         move 2 B -> C         move 1 A -> C  移动前n-1个盘子 B -> C     n=4:         4 A C         3 A B         4 C B         2 A C         4 B A         3 B C         4 A C 可以看到, 要把盘子A->B 要通过C, 把盘子从B->C要通过A def move(n, start,end, middle)     move n   start -> middle     move n-1 start -> end     move n   middle-> end     if n==1:         move 1 A -> C     move(n, 'B', 'C', 'A') '''   # def move(n, A, B, C):  # 从A -> B通过C #     print('move %d %s -> %s' % (n, A, C)) #     print('move %d %s -> %s' % (n - 1, A, B)) #     print('move %d %s -> %s' % (n, C, B)) #     n -= 1 #     if n == 1: #         return #     move(n, B, C, A)  # 从B -> C通过A # move(3, 'A', 'B', 'C') def hanoi(n, a, b, c):     if n == 1:         print(n, a, '-->', c)  # 移动第n个盘子到 A -> C     else:         hanoi(n - 1, a, c, b)  # 移动前n-1个盘子 A -> B 通过 C         print(n, a, '-->', c)         hanoi(n - 1, b, a, c)  # 移动前n-1个盘子 B -> C 通过 A # 调用 hanoi(3, 'A', 'B', 'C')

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!