基於Python的漢諾塔算法


首先貼出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)上

如此循環往復,完成漢諾塔問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM