标签:编号 else start return pre 分析 ddl 问题: style
‘‘‘ 问题: 有三个柱子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‘)
标签:编号 else start return pre 分析 ddl 问题: style
原文地址:https://www.cnblogs.com/staff/p/11403341.html