在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 漢諾塔中的移動次數(shù)計數(shù)問題

漢諾塔中的移動次數(shù)計數(shù)問題

  1. 在代碼中, 如何才能實現(xiàn)對移動次數(shù)的計算?
  2. count 應該定義在函數(shù)外還是內(nèi)?

代碼如下 求指點:

def Move_Tower(n, a, b, c):
    count = 0
    if n==1:
        print(a, "==>", c)       # 將最后一個盤子移動到 c 上
    else:
        Move_Tower(n-1, a, c, b) # 將 n-1 個盤子移動到 b 上,b 相當于一個緩沖區(qū)
        Move_Tower(1, a, b, c)   # 將 n-1 移動到 b 后, 將最后一個盤子直接放在 c 上
        Move_Tower(n-1, b, a, c) # 將 n-1 從緩沖區(qū) b 移動到 c 上, 完成


if __name__=="__main__":
    n = int(input("請輸入需要移動的盤子數(shù):"))
    # a = str(input("第一個柱子的名字"))
    # b = str(input("第二個柱子的名字"))
    # c = str(input("第三個柱子的名字"))
    Move_Tower(n, 'a', 'b', 'c') # 這里需要給 a b c 加 '' ,不然會顯示未定義 a b c
回答
編輯回答
苦妄
def Move_Tower(n, a, b, c):
    count = 0
    if n==1:
        print(a, "==>", c)                # 將最后一個盤子移動到 c 上
        return 1                          # 移動一次                 
    else:
        count += Move_Tower(n-1, a, c, b) # 將 n-1 個盤子移動到 b 上,b 相當于一個緩沖區(qū)
        count += Move_Tower(1, a, b, c)   # 將 n-1 移動到 b 后, 將最后一個盤子直接放在 c 上
        count += Move_Tower(n-1, b, a, c) # 將 n-1 從緩沖區(qū) b 移動到 c 上, 完成
        return count                      # 移動 count 次, 三階段 Move_Tower 的移動次數(shù)總合

測試:

>>> Move_Tower(3, 'a', 'b', 'c')
a ==> c
a ==> b
c ==> b
a ==> c
b ==> a
b ==> c
a ==> c
7

我回答過的問題: Python-QA

2017年10月27日 04:54