1.漢諾塔
# 漢諾塔 # 思路:把最底下的盤子看成一個整體,除了最底下的盤子以外的盤子(n-1)看作一個整體, # 目標是:原來的盤子都在A,現在要移動到C. # 移動的順序是: # ①先把(n-1)從A經過C移動到B # ②再把A上最后一個大盤子直接移動到C,這就放好了最后一個盤子 # ③再把(n-1)從B經過A移動到C # (n, a, b, c)表示從a經過b移動到c # (n, b, a, c)表示從b經過a移動到c def hanoi(n, a, b, c):#n是n個盤子,a,b,c是三個柱子 if n>0: hanoi(n-1, a, c, b) #第一步,把n-1部分從a經過c移動到b,這一步需要走兩步,先經過c,再到b,所以可以用遞回 print("把 %s 移動到%s" % (a, c),) #第二步,將a剩下的最后一個盤子直接移動到c,不用經過b,所以,他不用再遞回,直接記錄步驟加一即可 hanoi(n-1, b, a, c) #第三步,將n-1部分從b經過a,移動到c,這里又需要遞回了,所以又呼叫了自己,一直遞回到這個柱子沒了盤子就停止 print('每次移動都只移動一個盤子') hanoi(3, 'A', 'B', 'C') #這里的3是盤子總數,ABC分別代表一個柱子 # 每列印一行,便進行一次操作,行數就是漢諾塔移動的次數
計數版
i=0 def hanoi(l,a,b,c): global i if l>0: hanoi(l-1,a,c,b) print('從 %s 移動到 %s'%(a,c) ) i+=1 hanoi(l-1,b,a,c) hanoi(3,'A','B','C') print(i)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151101.html
標籤:Python
