重學資料結構與演算法 漢諾塔

2021-10-25 15:22:31 字數 514 閱讀 2463

def

hanoi

(n, a, b, c)

:if n >0:

hanoi(n-

1, a, c, b)

print

('moving from %s to %s'

%(a, c)

) hanoi(n-

1, b, a, c)

hanoi(3,

'a',

'b',

'c')

遞迴總體來說,要看整體,不能揪住細節不放,也就是說要按照不失一般性的思路來考慮。漢諾塔可以總結出3個步驟,(1)a的最上層從c到b;(2)a的最上層到c;(3)b的最上層到c。

遞迴問題可以總結出遞迴公式,這個遞迴公式在每一步都適用,這就是為什麼要看整體,而不看具體每一步怎麼做。我之前會一步一步的演示,生怕某一步走錯了。

注意遞迴問題是從外到裡還是從裡到外(畫個圖就看出來了)

注意:遞迴需要有結束條件

java資料結構與演算法學習 漢諾塔

漢諾塔是遞迴分治思想不得不說的經典案例。漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之...

資料結構11 漢諾塔問題

漢諾塔是乙個經典遞迴問題,但是我覺得確實有點繞,看了一會兒,總算有點眉目吧 假設有n層圓盤需要挪動,需要從x,y,z之間移動,那麼目的就是將最後一層的圓盤挪動到z軸上,但是要完成這一步,就需要將前n 1層所有的圓盤,按照從小到大的順序暫時放置在y軸上。將最後乙個圓盤放置到z上的時候,需要將y上的n ...

漢諾塔演算法

最簡步驟 2的n次冪 1 為了實現 n個盤從 借助c 從a 移動到 b 思路如下 首先考慮極限當只有乙個盤的時候 只要 盤直接從 a b即可 那麼當有2個盤的時候就只要先把1號盤從a c 然後 把2號盤 a b 再 把 2好盤從 c b 那麼當有n個盤的時候你只要先把 n 1個 盤 借助 b 移動到...