汉诺塔递归我理解不了怎么办

    技术2022-08-01  67

    ''' 汉诺塔——借助B柱,将A柱的所有盘子移动到C柱上,期间小的盘子永远在上面,一次只能移动一个盘子 ''' # 观察问题: # 1.如果只有 1 个盘子A——>C # 2.如果有大于等于 2 个盘子,我们总可以把它们看成是 2 个盘子,一个是最下面的最大的盘子,一个是剩下上面的盘子 # 2.1 先把最上面的1 个或多个盘子移到B上A——>B # 2.2 再把最下面的盘子从A——>C # 2.3 把B柱上的盘子从B——>C # 定义一个函数用来解决汉诺塔问题 def hanoiTower(n, a, b, c): # 参数n代表盘子个数 a b c 代表柱 A B C # 基线条件一 退出 if n == 1: print('第 1 个盘子从', a, '-->', c) # 基线条件二 递归 else: # n>=2 的情况 # 2.1 先把最上面的1 个或多个盘子移到B上A——>B 借助 C hanoiTower(n-1)指除了最下面一个大盘子外其他的所有 hanoiTower(n-1, a, c, b) # 2.2 再把最下面的盘子从A——>C print('第', n, '个盘子从', a, '-->', c) # 2.3 把B柱上的盘子从B——>C 可能借助A hanoiTower(n-1, b, a, c) hanoiTower(4, 'A', 'B', 'C')
    Processed: 0.011, SQL: 9