抽象之漢諾塔問題(Python3)

漢諾塔問題:python

圖片

       如圖,有3根柱子,柱子A上有若干自上而下、由小到大的石盤,每次只容許移動1個石盤,石盤能夠在ABC柱子上隨意移動,移動過程當中小的石盤必須在大的石盤上面,如何將A上的石盤按原樣所有移動到C上。ide


Python3程序模擬:blog

       要用python3程序模擬這個移動步驟,首先要將這個問題分離-提取,也就是將問題的關鍵步驟抽象出來,比如咱們的等差等比數列的求和公式。圖片

假設A上只有1個石盤,那隻需將石盤從A直接移動到C。
it

假設A上只有2個石盤,須要將小的石盤從A移動到B,而後將大的石盤從A移動到C,而後將小的石盤從B移動到C。class

。。。。。。。程序

假設A上有64個石盤,咱們沒法想象,只能將問題逐步抽象,站到一個更高一些的角度去思考:im

       由於每次移動,要求小的石盤必須在大的石盤上面,因此若是想將A上的石盤所有移動到C上,咱們只能將A上的前63個石盤移動到B上,而後將A上最大的石盤移動到C上(這裏和A上只有1個石盤是同樣樣的);命名

       如今A上沒有石盤了,B上有63個石盤,C上有一個最大的石盤,如今C上的石盤能夠扔掉了,最大的石盤已經成功轉移,且任何其餘石盤都比最大的石盤小,因此能夠忽略不計了,問題轉變爲如何將B上的63個石盤,藉助A,所有移動到C上(又回到了A上有64個石盤的命題);margin

 

Python3代碼:

圖片


代碼簡要說明:

n->石盤的數量,a,b,c->3根被命名的柱子

若是n=1,只有1個石盤,從A藉助B移動到C;

不然,將n-1的石盤從A移動到C,將第n個石盤(最大的那1個石盤)從A移動到C,將B上n-1個石盤從B藉助A移動到C,完成。


抽象:

       咱們將一個問題從假設到分離,到關鍵步驟提取,而後用程序模擬出問題的實現路徑,這就是抽象的魅力。你們能夠抽象一下8皇后問題。

相關文章
相關標籤/搜索