復雜遞歸問題:漢諾塔

復雜遞歸問題:漢諾塔

  • 漢諾塔問題是法國數(shù)學家Edouard Lucas于1883年, 根據(jù)傳說提出來的。
  • 傳說在一個印度教寺廟里, 有3根柱子, 其中一根套著64個由小到大的黃金盤片, 僧侶們的任務就是要把這一疊黃金盤從一根柱子搬到另一根, 但有兩個規(guī)則:一次只能搬1個盤子大盤子不能疊在小盤子上

分解為遞歸形式

我們還是從遞歸三定律來分析河內(nèi)塔問題
基本結(jié)束條件(最小規(guī)模問題),如何減小規(guī)模,調(diào)用自身

  • 假設我們有5個盤子, 穿在1#柱, 需要挪到3#柱
    如果能有辦法把最上面的一摞4個盤子統(tǒng)統(tǒng)挪到2#柱,那問題就好解決了:
    把剩下的最大號盤子直接從1#柱挪到3#柱
  • 再用同樣的辦法把2#柱上的那一摞4個盤子挪到3#柱,就完成了整個移動



    接下來問題就是解決4個盤子如何能從1#挪到2#?
    此時問題規(guī)模已經(jīng)減?。?/p>

  • 同樣是想辦法把上面的一摞3個盤子挪到3#柱,把剩下最大號盤子從1#挪到2#柱,再用同樣的辦法把一摞3個盤子從3#挪到2#柱
  • 一摞3個盤子的挪動也照此:分為上面一摞2個,和下面最大號盤子
  • 那么2個盤子怎么移動?
  • 不行, 就再分解為1個盤子的移動

遞歸思路

  • 將盤片塔從開始柱, 經(jīng)由中間柱, 移動到目標柱:
    首先將上層N-1個盤片的盤片塔,從開始柱,經(jīng)由目標柱,移動到中間柱;
    然后將第N個(最大的)盤片,從開始柱,移動到目標柱;
    最后將放置在中間柱的N-1個盤片的盤片塔,經(jīng)由開始柱,移動到目標柱。
  • 基本結(jié)束條件, 也就是最小規(guī)模問題是:
    1個盤片的移動問題
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容