演算法 漢諾塔的遞迴深度

2022-07-15 18:54:12 字數 580 閱讀 3149

今天早晨在上班的路上,一好朋友突然提到之前的乙個計算機的考題,漢諾塔(相信大家都玩過)的遞迴深度。

由於很久沒有看演算法,以及腦容量有限,當時沒有多想。

來到公司後,把公式列了一下,終於清晰多了。

下面假設3根柱子編號為1,2,3.

把n個圓盤從3號移到1號 = 把n-1個圓盤從3號移到2號 + 把第n個圓盤從3號移到1號 + n-1個圓盤從2號移到1號

f(n) = f(n-1) + 1 + f(n-1) = 2f(n-1) + 1

接下來就是數學題了, 利用等比數列。

並且f(1) = 1,因為移動乙個圓盤

f(n) = 2*f(n-1) + 1

= 2*(2f(n-2) + 1) + 1

= 2^2f(n-2) + 1 + 2

=...

= 2^(n-1)f(1) + 1 + 2^2 + 2^3 + ... + 2^(n-2

) = 2^(n-1) + 2^(n-1) - 1

= 2^n - 1

看來平時還是要經常看下演算法方面的書籍,要不就像初高中知識一樣被遺忘了。

漢諾塔 遞迴演算法

個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...

漢諾塔遞迴演算法

大學的時候專業課程很差,指導大二學習演算法設計的時候,發現專業課裡比較有趣的一門。專心學習了一學期 最近在學習python發現了乙個遞迴演算法很迷茫,遂研究了一下。簡單來說明一下 首先漢諾塔的規則是1 每次移動一塊 2 小木塊只能放在大木塊上 3 將所有木塊從a柱子移動c柱子木塊上 用幾個變數和常量...

漢諾塔 遞迴

個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...