python漢諾塔演算法
A. python利用遞歸解決漢諾塔問題,求大神解釋一下代碼
這是一個典型的遞歸程序
當只有一層的時候,直接把x放到z上結束
當大於1層的時候,先把x和z放到y上,然後繼續遞歸
把y放到x上,然後放到z上,結束處理
B. python漢諾塔非遞歸
python漢諾塔非遞歸,運用list和function知識的解答
無論stack還是recursion都是從漢諾塔的原理去解決問題,但如果已經想清楚漢諾塔的原理,其實只用把答案print出來就行了
先找規律:
一層:A-->C
兩層:A-->B
-------
A-->C
-------
B-->C
三層:A-->C
A-->B
C-->B
-------
A-->C
-------
B-->A
B-->C
A-->C
注意到n層漢諾塔有(2**n) - 1 個步驟,而中間的一步(兩個分割線之間)都是「A-->C」,中間的這一步將這一層漢諾塔的解分為上下兩個部分
仔細觀察,上面一部分是將上一層的解中所有的B,C交換,下面一部分是將上一層的解中所有的A,B交換
例如第二層是:
A-->B
A-->C
B-->C
第三層上部分就將第二層的解的C換成B,B換成C,即得出:
A-->C
A-->B
C-->B
第三層下部分就將第二層的解的A換成B,B換成A,即得出:
B-->A
A-->C
C-->B
這個規律同樣適用於第一層,和以後的所有層
然後就好辦了,代碼如圖:
代碼
其中convertAB,convertBC就是AB交換,BC交換的函數,這兩個函數可以自己定義,用中間變數即可
C. python的漢諾塔問題
把n-1的盤看成一個整體。漢諾塔的操作:n-1的盤全部從x移動到y,最後一個盤子從x移動到z,再把n-1的盤從y移動到z。大概這個意思。
D. python解決漢諾塔問題
解漢諾塔最簡單的做法就是遞歸:
類似如何將大象裝進冰箱:1)將冰箱門打開;2)把大大象放進去;3)把冰箱門關上……
我們將所有的盤都在同一個桿上從大到小排列視為【完美狀態】,那麼,目標就是將最大碟片為n的完美狀態從a桿移到b桿,套用裝大象的思路,這個問題同樣是三步:
1)把n-1的完美狀態移到另一個桿上;
2)把n移到目標桿上;
3)把n-1的完美狀態移到目標桿上。
如下:
E. 利用python編程解決漢諾塔問題,例如移動64層漢諾塔需要多少時間
那麼好多人會問64個圓盤移動到底會花多少時間?那麼古代印度距離現在已經很遠,這64個圓盤還沒移動完么?我們來通過計算來看看要完成這個任務到底要多少時間?
我們首先利用數學上的數列知識來看看F(n=1)=1,F(n=2)=3,F(n=3)=7,F(n=4)=15……F(n)=2F(n-1)+1;
我們使用數學歸納法可以得出通項式:F(n)=2^n-1。當n為64時F(n=64)=18446744073709551615。
我們假設移動一次圓盤為一秒,那麼一年為31536000秒。那麼18446744073709551615/31536000約等於584942417355天,換算成年為5845.54億年