漢諾塔問題: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皇后問題。