怎麼理解漢羅塔問題 初學者如何深入理解漢諾塔問題?

2021-10-13 04:10:06 字數 575 閱讀 2735

今天我也看到遞迴了。

我的思路如下,遞迴源於歸納,當n等於1時,推出結果。當n等於t-1時推出結果,並能由此推出,當n等於t時也推出結果,即m(t)能表達出m(t-1)的關係。

第一步確定漢諾塔的結果是什麼。

漢諾塔的結果就是當有幾個圓盤在原柱子時,結果就是就把這些柱子移到目標柱子。展開就是當n等於1時,結果就是把乙個圓盤從原柱子移到目標柱子,當n等於t-1時,結果就是把t-1個圓盤從原柱子移到目標柱子,當n等於t時,結果就是把t個圓盤從原柱子移到目標柱子。

要遞迴的第二個條件就是確定m(t)和m(t-1)這裡的m()方法都一樣,即從原柱子有t-1個盤子和有t個盤子時移動到目標柱子,完成結果的方式和步驟一樣,即那三步要一樣,或者說鏈條要一樣。所以要寫出t-1個盤子時移動到結果的三個步驟和t個盤子移動移動到結果的三個步驟,進行對比,步驟和方式是否一樣。如果一樣,再進行下一步。

在這基礎上,是發現m(t)和m(t-1)的關係,m(t)和m(t-1)的關係可以表示為m(t,s,t)=m(t-1,s,m)+(t,s->t)+m(t-1,m,t)

綜上,確定漢諾塔是乙個遞迴問題。

根據上面分析,確定了基例,確定了鏈條,往模板上套吧。

怎麼理解漢羅塔問題 教你輕鬆理解漢諾塔問題

漢諾塔的解決在程式裡實際上是乙個函式遞迴呼叫的過程。假設a上有 n個盤子,求解的大 致想法是想把 a最上面的 n 1個盤子借助c挪到 b,接著把 a最下面的最大的盤子挪到 c,再把b上的 n 1個盤子借助a挪到 c,完成。首先先看 c 裡解決這個問題的 using system using syst...

初學者如何理解遞迴

0 遞迴的定義 如果你沒明白遞迴的定義,參見本文 0.遞迴的定義 1 從斐波那契數列開始 斐波那契的遞推公式 斐波那契數列遞迴演算法和遞推公式類似 int fibo int x 就這麼簡單?沒錯,通過這個例子可以看出,遞迴函式只需要寫兩部分,乙個是遞迴終止條件 if x 3 return 1 乙個是...

怎麼理解漢羅塔問題 漢諾塔問題(三柱及四柱)詳解

漢諾塔 hanoi tower 又稱河內塔,傳說大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動乙個圓盤。問應該如何操...