首先貼出Python編寫的漢諾塔算法的代碼:
def hanoti(n,x1,x2,x3):
if(n == 1):
print('move:',x1,'-->',x3)
return
hanoti(n-1,x1,x3,x2)
print('move:',x1,'-->',x3)
hanoti(n-1,x2,x1,x3)
hanoti(3,'A','B','C')
漢諾塔問題歸根結底就是一個遞歸問題,遞歸包括兩大要素:遞歸體、遞歸結束條件
首先分析漢諾塔算法的思想:
第一步:若想將n個圓盤中最大的圓盤從A塔放到C塔,需要借助B塔放置其余的n-1個圓盤
第二步:再把B塔看做初始條件時的A塔,將B塔上的n-1個圓盤依據規則放置到C塔上,這一步就是實現一個遞歸
依據代碼來分析:
首先定義函數hanoti(n,x1,x2,x3),該函數作用是將n個圓盤從第一個參數(這里為x1)放到第三個參數(這里為x3)上,
if判斷是遞歸結束條件,意思為若只有一個圓盤,只需要將他從第一個參數(這里為x1)放到第三個參數(這里為x3)上即可,
如果不滿足遞歸結束條件,函數繼續執行,
hanoti(n-1,x1,x3,x2)語句就是執行第一步的過程,即將除最大圓盤外的n-1個圓盤從第一個參數(這里為x1)放到第三個參數(這里為x2)上,
然后輸出表示移動結束的print語句,
這一句結束后,表示x2上現在放置着所有剩余的n-1個圓盤,
再繼續遞歸hanoti(n-1,x2,x1,x3)語句,執行第二步過程,即將剩余的n-1個圓盤按同樣的方法從從第一個參數(這里為x2)放到第三個參數(這里為x3)上
如此循環往復,完成漢諾塔問題