關於對hanoi塔遞迴的理解

2021-08-20 00:07:04 字數 1533 閱讀 8162

對遞迴的理解的要點主要在於放棄!

放棄你對於理解和跟蹤遞迴全程的企圖,只理解遞迴兩層之間的交接,以及遞迴終結的條件。

想象你來到某個熱帶叢林,意外發現了十層之高的漢諾塔。正當你苦苦思索如何搬動它時,林中出來乙個土著,毛遂自薦要幫你搬塔。他名叫二傻,戴著乙個草帽,草帽上有乙個2字,號稱會把一到二號盤搬到任意柱。

你靈機一動,問道:「你該不會有個兄弟叫三傻吧?」

「對對,老爺你咋知道的?他會搬一到三號盤。「

」那你去把他叫來,我不需要你了。「

於是三傻來了,他也帶著個草帽,上面有個3字。

你說:」三傻,你幫我把頭三個盤子移到c柱吧。「

三傻沉吟了一會,走進樹林,你聽見他大叫:」二傻,出來幫我把頭兩個盤子搬到c!「

由於天氣炎熱你開始打瞌睡。朦朧中你沒看見二傻是怎麼工作的,二傻幹完以後,走入林中大叫一聲:「老三,我幹完了!」

三傻出來,把三號盤從a搬到b,然後又去叫二傻:「老二,幫我把頭兩個盤子搬回a!」

餘下的我就不多說了,總之三傻其實只搬三號盤,其他叫二傻出來幹。最後一步是三傻把三號盤搬到c,然後呼叫二傻來把頭兩個盤子搬回c

事情完了之後你把三傻叫來,對他說:「其實你不知道怎麼具體一步一步把三個盤子搬到c,是吧?」

三傻不解地說:「我不是把任務幹完了?」

你說:「可你其實叫你兄弟二傻幹了大部分工作呀?」

三傻說:「我外包給他和你屁相干?」

你問到:「二傻是不是也外包給了誰?「

三傻笑了:「這跟我有屁相干?」

你苦苦思索了一夜,第二天,你走入林中大叫:「十傻,你在哪?」

乙個頭上帶著10號草帽的人,十傻,應聲而出:「老爺,你有什麼事?」

「我要你幫把1到10號盤子搬到c柱「

「好的,老爺。「十傻轉身就向林內走。

「慢著,你該不是回去叫你兄弟九傻吧「

「老爺你怎麼知道的?「

「所以你使喚他把頭九個盤子搬過來搬過去,你只要搬幾次十號盤就好了,對嗎?「

「對呀!「

「你知不知道他是怎麼幹的?「

「這和我有屁相干?「

你嘆了一口氣,決定放棄。十傻開始幹活。樹林裡充滿了此起彼伏的叫聲:「九傻,來一下!「 「老八,到你了!「「五傻!。。。「」三傻!。。。「」大傻!「

你注意到大傻從不叫人,但是大傻的工作也最簡單,他只是把一號盤搬來搬去。

若干年後,工作結束了。十傻來到你面前。你問十傻:「是誰教給你們這麼幹活的?「

十傻說:「我爸爸。他給我留了這張紙條。」

他從口袋裡掏出一張小紙條,上面寫著:「照你帽子的號碼搬盤子到目標柱。如果有盤子壓住你,叫你上面一位哥哥把他搬走。如果有盤子佔住你要去的柱子,叫你哥哥把它搬到不礙事的地方。等你的盤子搬到了目標,叫你哥哥把該壓在你上面的盤子搬回到你上頭。「

你不解地問:「那大傻沒有哥哥怎麼辦?「

十傻笑了:「他只管一號盤,所以永遠不會碰到那兩個『如果』,也沒有盤子該壓在一號上啊。」

但這時他忽然變了顏色,好像洩漏了巨大的機密。他驚慌地看了你一眼,飛快地逃入樹林。

第二天,你到樹林裡去搜尋這十兄弟。他們已經不知去向。你找到了乙個小屋,只容乙個人居住,但是屋裡有十頂草帽,寫著一到十號的號碼。

遞迴 Hanoi塔問題

題目 hanoi塔問題,遊戲規則 1 每次只能移動乙隻圓盤 2 任何時候大圓盤不能壓在小圓盤之上 3 任何時候都不允許將圓盤放在三根立軸之外的任何地方。分析 遞迴的 base case 當只有乙個圓盤的時候,直接從圓盤所在的立軸移動到目標立軸,即完成。遞迴的 recursion rule 如圖所示,...

深刻的理解遞迴漢諾塔(Hanoi)

演算法 1,從目標出發,我們將n個盤子從a移動到b通過c,假如我們這樣寫 hanoi n,a,b,c 2,同理,我們也就可以知道,將n 1個盤子從a移動到b通過c,即就是 hanoi n 1,a,b,c 3,但是我們知道我們一次只能移動乙個盤子,所以,如果我們要將n個盤子從a移動到b通過c,我們可以...

帶你理解 Hanoi 漢諾塔遞迴演算法

一.由遊戲引發的 hanoi 問題 漢諾塔是根據乙個傳說形成的乙個問題。漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著 64 片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,...