64階漢諾塔完成需要5800億年?手寫一個漢諾塔遞歸算法

2021-01-08 程式設計師架構之路

漢諾塔是一個非常經典的數學模型,它有一個古老的傳說。相傳印度主神大梵天在創造世界的同時,也造了三根金剛石柱子。其中一根柱子上放著64個大小均不相同的圓盤。大梵天命令婆羅門將這64個圓盤按照從大到小的順序移動到另一根柱子上,在移動的過程中始終要保持大盤在下,小盤子在上。這就是最早關於漢諾塔的古老傳說。這其實是一種時間的象徵,因為按照這個規則,將64個圓盤移動到另一個圓柱上,在時間上來說幾乎是不可能的,需要的時間可能比宇宙誕生的時間還要長,具體為什麼?文章會為大家詳細說明。

我們首先將這個遊戲簡化。

我們設定有A、B、C三根柱子,A柱子上從下往上放的是從大到小依次排好順序的盤子,B和C柱子是空的。我們需要將A柱子上所有的圓盤移動到C柱子上,移動的過程中,始終保持大盤子在下,下盤子在上,這就是漢諾塔的遊戲規則。

先從最基礎的說起。

一個圓盤子:如果只有一個圓盤子,那只需要移動一次,直接移動到C柱子上。

兩個圓盤子:如果有兩個圓盤子,我們需要藉助B柱子,將第一個盤子移動到B柱子上,第二個盤子移動到C柱子上,然後將B柱子上的盤子移動到C柱子上。這樣兩個盤子就全部移動過來,總共需要3步。

三個圓盤子:我們給圓盤子依次編號為1、2、3。從規則判斷,首先,我們需要將3移動到C柱子的最底部,所以,我們需要將2和1移動到B柱子上。根據前面講過,我們需要3步就可以了,然後移動3到C。最後重複之前的步驟,將2和1移動到C上。完整的步驟就是1—C,2—B,1—B,3—C,1—A2—C,1—C,總共需要7步完成。

通過1、2、3階漢諾塔移動步驟,我們可以推導出一個公式:

完成步驟=2^n-1,n代表盤子的個數

通過公式我們可以推導出,四階漢諾塔需要15步驟,五階漢諾塔需要31步驟,而64階漢諾塔需要多少步驟呢?2的64次方減1(18446744073709500000),需要這麼多步驟。假設一個步驟需要1秒,我們將結果換算成年的單位:

2^64-1=184467440737095000001年=360*24*3600=31104000秒

大概需要5800億年。宇宙大爆炸至今才45億年。假設從那時候開始玩,離完成還需要很多很多年,估計玩到人類滅絕還玩不完。

每一個遊戲背後都有一個邏輯算法在裡面。通過漢諾塔我們已經分析出它的算法,現在我們用Java語言實現它的算法。

我們通過運行方法可以得到1-5階漢諾塔步驟:

一階:路線:A--->C二階:路線:A--->B A--->C B--->C三階:路線:A--->C A--->B C--->B A--->C B--->A B--->C A--->C四階:路線:A--->B A--->C B--->C A--->B C--->A C--->B A--->B A--->C B--->C B--->A C--->A B--->C A--->B A--->C B--->C……通過代碼我們可以算出任意階的漢諾塔步驟。64階的漢諾塔步驟電腦也可以算出來,但是電腦需要跑很長時間,即使算出來,也沒有條件存儲步驟的數據。

算法的邏輯其實很簡單:當level(代表幾階漢諾塔)=1的時候,從第一個塔移動到第三個塔,這是一種特殊情況。當level>1時候,遞歸移動level-1層漢諾塔,直到leve=1停止遞歸。

這就是漢諾塔的遞歸算法,古人的智慧真的是很強大。

相關焦點

  • 畢業生求職必會算法 漢諾塔
    漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。(n-1) 個盤子,從 A 移動到 B;把 A 柱子上面的第 n 個盤子由 A 移動到 C;把第一步 B 柱子上的 (n-1) 個盤子由 B 移動到 C在算法的實現過程中,我們利用遞歸的思想。
  • 簡單又常見的算法題:漢諾塔
    ,修煉編程內功)來源:山大王wld算法題儘量做到難易結合,在我們看一些難題的時候偶爾也可以看一些非常簡單又非常容易看懂的題,要不然算法題一直看不懂,容易打擊大家的興趣,今天來看一道非常簡單又非常常見的算法題,就是漢諾塔問題,這道題我想只要是學過編程的同學都應該知道的。
  • 漢諾塔遊戲:遞歸經典問題
    漢諾塔遊戲,是非常著名的智力趣味題,在很多算法書籍和智力競賽中都有涉及。
  • 一起玩轉漢諾塔
    大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。後來,這個傳說就演變為漢諾塔遊戲,玩法如下:1.有三根杆子A,B,C。
  • 你會玩漢諾塔嗎?——讓遞歸算法來幫你,只需「3步」
    今天我們來介紹一種很常見的算法——遞歸。遞歸函數什麼是遞歸?簡單的說,遞歸就是通過不斷調用自己,來完成不斷循環的一個過程。可能概念有些拗口,我們編寫一個遞歸函數來說明。斐波那契數列大家都知道,它從第三項開始,每一項都是前面兩項的和:1,1,2,3,5,8,13,21......
  • 數學奧秘——漢諾塔的秘密
    今天帶來了一個有趣的數學思維遊戲——漢諾塔遊戲。相傳神創造了3根杆子,就有了這個遊戲,分別是起始杆、過渡杆和目標杆,起始杆上擺放著大小不同的圓盤。其中起始杆上擺放一個圓盤表示第一關,擺放兩個圓盤表示第二關,擺放三個圓盤表示第三關,依次類推。
  • 漢諾塔的神秘步伐
    快問快答:漢諾塔什麼形狀?
  • 啟迪智慧的漢諾塔遊戲
    1883年法國的數學家 Edouard Lucas(愛德華·盧卡斯) 提出漢諾塔問題。這個小小的遊戲裡邊包含著巨大的數學智慧,塔遊戲中蘊藏著豐富的數學思想方法:包括分類討論的思想與方法、最優化選擇的方法、數學歸納的方法、數學遞歸的思想等,因此 ,玩好漢諾塔遊戲不僅可以從中獲得快樂 ,還能夠學到許多數學知識 。
  • 關於漢諾塔的步驟
    畫之前,我們先了解一個有趣的問題~如何理解漢諾塔到底幾個步驟的問題?看看熱心知友的回覆漢諾塔永遠只有三步:ok,進入教程。準備工具:尺子,鉛筆,剪刀。先來看效果圖:▼第一步:我們用尺子劃分好由小到大的格子。
  • 荒野日記漢諾塔怎麼玩
    本次給大家帶來的是荒野日記中的漢諾塔,漢諾塔如果過不去的話就會沒辦法通過遺蹟,這裡就給大家講解一下,卡關的玩家可以看一下,希望能夠幫助到各位玩家~下面就一起來看看吧! 本次給大家帶來的是荒野日記中的漢諾塔,漢諾塔如果過不去的話就會沒辦法通過遺蹟
  • C語言+EasyX庫:漢諾塔移動動畫
    漢諾塔(又稱河內塔)是一款源於印度一個古老傳說的益智類遊戲。傳說上帝創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著7片黃金圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。遊戲裡有三根金剛石柱子,在一根柱子上從下往上按大小順序摞著7片黃金圓盤。
  • 強迫症玩家的最愛 書本漢諾塔讓一切歸於有序
    漢諾塔是一種非常古老的益智遊戲,小編在很小的時候就接觸過這種遊戲,對這類遊戲雖談不上喜歡,但卻有著很深刻的印象,今天小編就為大家帶來就是一款名為書本漢諾塔的休閒益智遊戲,遊戲好不好,大家看過評測就知道了。
  • 漢諾塔TowerOfHanoi 工作學習之餘娛樂一番
    漢諾塔(又稱河內塔)是一款WP7平臺上源於印度一個古老傳說的益智類遊戲。傳說上帝創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著64片黃金圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。
  • 漢諾塔遊戲完整版
    遊戲的名字,最通俗的叫法是漢諾塔,英文名Tower of Hanoi。Hanoi在英文裡是河內(越南首都)的意思,所以,其實還是叫河內塔更準確些。印度教的主神梵天創造世界時,做了三根金剛石的柱子,並在其中的一根柱子上按照大小順序依次放置了64個黃金圓盤。
  • 漢諾塔拓展項目
    漢諾塔拓展項目項目簡介:這是一個考驗集體智慧的項目,根據要求,學員需在規定時間內將漢諾塔從A區移到C區。這個項目能訓練團隊合作解決問題的能力;讓學員學會用不用的角度思考問題;診斷學員的個性特徵;提升團隊間的溝通能力。
  • 漢諾塔——我其實還在第一層
    漢諾塔問題描述假設有3個分別命名為A,B,C的塔座,在塔座A上插有n個直徑大小各不相同,依小從大編號為1,2,........,n的圓盤。現要求將塔座A上的n個圓盤移至塔座C上,並仍按同樣的順序疊排,圓盤移動時必須遵守下列規則:每次只能移動一個圓盤;圓盤可以插在A,B和C中的任一塔座上;任何時候都不能將一個較大的圓盤壓在較小圓盤上;三個圓盤移動方法