簡單的漢諾塔實(shí)現(xiàn):
def move(n,a,b,c):
if n==1:
print(a,'->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(3,'A','B','C')
重點(diǎn)其實(shí)是:不要一開始就關(guān)心每一步怎么解決的滩援,你只需要把函數(shù)當(dāng)成一個實(shí)現(xiàn)你目的的神器卷要,隨時調(diào)用赂苗。也就是遞歸。
1
比如說我們有一個萬能神器move渗蟹,只需要給它幾個參數(shù)块饺,即可自動完成一個功能:把n個盤子利用緩沖區(qū),從起點(diǎn)運(yùn)送到終點(diǎn)雌芽,期間嚴(yán)格遵守漢諾塔規(guī)則授艰。
這里你暫時不需要去了解每一個步是如何實(shí)現(xiàn)的。
move(N,起點(diǎn)世落,緩沖區(qū)淮腾,終點(diǎn))
N: 盤子的個數(shù)。
2
現(xiàn)在有個n個盤子屉佳,a,b,c三個塔谷朝。
把n個盤子抽象成兩個盤子,n-1 和 底下最大的1
n = (n-1) + 1
這個最簡單的玩法如何實(shí)現(xiàn)呢
首先:把n-1 移到 緩沖區(qū) -------過程1
然后:把1 移到 終點(diǎn) -------過程2
最后:把緩沖區(qū)的n-1 移到 終點(diǎn) -------過程3
3
過程1 如何實(shí)現(xiàn)武花?
還是召喚神器吧圆凰。
move(N,起點(diǎn),緩沖區(qū)髓堪,終點(diǎn))
此時送朱,我們的起點(diǎn)是a,終點(diǎn)是b ,N=n-1,緩沖區(qū)只能是c了
move(n-1,a,c,b)
過程2呢?
move(1,a,b,c)
過程3呢干旁?
move(n-1,b,a,c)
4
最后:
if (N == 1):
a -> c #此時我已經(jīng)不需要緩沖區(qū)了