def move(n, a, b, c, A, B, C): # 大写字母A、B、C为列表,表示柱子a、b、c里的盘子; B、C可以设默认参数,默认柱子b、c为B=[]、C=[]
if n == 1: print('此时 %s为 %s' % (a,A)) # 移动前a中的木块情况 print('move %s中的%s-->到%s' % (a,A[0],c)) # 将要移动的过程: # 每次能移走的肯定是 目前柱子上最上层的盘子; 每次放盘子的时候也是放在 柱子的最上层 C.insert(0,A.pop(0)) # A.pop(0)即移走a中最上层的木块 # C.insert(0, )则表示放入c的最上面 print('此时 %s为 %s' % (c,C)) print('\n') else: # 递归过程: move(n-1, a, c, b, A, C, B) # 把a中前面n-1个木板假设为是一整块, 借由c移动到b,a只剩最下边一块(第n块) move(1, a, b, c, A, B, C) # 把a中的剩下的最下边的一块木板移动到c move(n-1, b, a, c, B, A, C) # 把b中n-1个木板假设为是一整块, 借由a移动到c
move(3, 'a', 'b', 'c', list(range(1,3+1)), [], []) # (range(1,n+1),根据输入n的值,生成一个[1,2,...,n]的数列。
# 数字越大,代表盘子越大, 上小下大
RESTART: C:\Users\dell\AppData\Local\Programs\Python\Python35\利用递归函数移动汉诺塔-list移动.py 此时 a为 [1, 2, 3] move a中的1-->到c 此时 c为 [1]
此时 a为 [2, 3] move a中的2-->到b 此时 b为 [2]
此时 c为 [1] move c中的1-->到b 此时 b为 [1, 2]
此时 a为 [3] move a中的3-->到c 此时 c为 [3]
此时 b为 [1, 2] move b中的1-->到a 此时 a为 [1]
此时 b为 [2] move b中的2-->到c 此时 c为 [2, 3]
此时 a为 [1] move a中的1-->到c 此时 c为 [1, 2, 3]
Sign in to make a reply
花泽的类
利用递归函数移动汉诺塔:
-- coding: utf-8 --
def move(n, a, b, c, A, B, C): # 大写字母A、B、C为列表,表示柱子a、b、c里的盘子; B、C可以设默认参数,默认柱子b、c为B=[]、C=[]
move(3, 'a', 'b', 'c', list(range(1,3+1)), [], []) # (range(1,n+1),根据输入n的值,生成一个[1,2,...,n]的数列。
RESTART: C:\Users\dell\AppData\Local\Programs\Python\Python35\利用递归函数移动汉诺塔-list移动.py 此时 a为 [1, 2, 3] move a中的1-->到c 此时 c为 [1]
此时 a为 [2, 3] move a中的2-->到b 此时 b为 [2]
此时 c为 [1] move c中的1-->到b 此时 b为 [1, 2]
此时 a为 [3] move a中的3-->到c 此时 c为 [3]
此时 b为 [1, 2] move b中的1-->到a 此时 a为 [1]
此时 b为 [2] move b中的2-->到c 此时 c为 [2, 3]
此时 a为 [1] move a中的1-->到c 此时 c为 [1, 2, 3]