漢諾塔問題分析與python實現

2021-07-30 06:50:04 字數 807 閱讀 9370

問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石

柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

漢諾塔問題是乙個經典的遞迴問題,對於這個問題,我們可以把它簡單的去看成是如何用n-1去表示n。

在a,b,c三個柱子上,我們先假設a柱上只有兩個盤子,那麼很簡單,只需要把最上面的那個盤子移到b柱上,再把a柱上最下面的盤子移到c柱上,最後把b柱的盤子移到c柱就可以了。

假設我們有n個盤子,那麼可以把最下面的盤子看成是第n個盤子,而我們要做的是把上面n-1個盤子移到b柱上,再把第n個盤子移到c柱。我們可以把b柱視為主中轉站。

在將n-1個盤子移到b柱的過程中,我們需要借助c柱作為分中轉站,當完成n-1個盤子的移動時,此時b柱上存在n-1個盤子,而我們接下來要做的,和之前類似,就是借助把n-2個盤子移動到a柱,把第n-1個盤子移動到c柱。在移動n-2個盤子到a柱時,我們同樣要借助c作為分中轉站。

現在問題就很清晰了,在移動的整個過程中,變換的只有ab這兩個主中轉站,而分中轉站c是不變的,因為c作為中轉的作用僅僅是為了盤子在ab之間的移動。

這樣,我們很容易就可以用遞迴寫出整個過程的**。下面給出這個過程的python**:

def move(n,a,b,c):

if n==1:

print(a,"move to ",b)

else:

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

漢諾塔問題python詳解 《簡單分析》漢諾塔問題

漢諾塔是乙個非常著名的遊戲,遊戲中將會有三根棍子,第一根棍子上有n個從大到小疊起來的盤子,遊戲的目標是將這n個從大到小疊起來的盤子放到第三根棍子上。每一次只允許移動乙個,而且大的盤子永遠在小的盤子的下面。這也是非常著名的遞迴入門題。我們將通過呼叫三次遞迴函式來解決這個問題。暫時不考慮 只考慮解題。先...

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...

python 漢諾塔問題

最近被漢諾塔的python 遞迴給迷暈,本想搞個程式除錯,但sublimetext用的不是很熟,參考了很多大佬的博文,需要總結下以防往後忘記 關於理解 流程,其實主要關注兩點 1 形參實參注意別搞混了 2 函式呼叫後都是要返回的,從哪個入口進去執行最後執行完程式是要返回回原來的入口,再執行時要注意開...