[算法]——漢諾塔的遞歸深度

今天早晨在上班的路上,一好朋友忽然提到以前的一個計算機的考題,漢諾塔(相信你們都玩過)的遞歸深度。算法

因爲好久沒有看算法,以及腦容量有限,當時沒有多想。spa

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

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

 

主要思路:

把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,由於移動一個圓盤class

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

 

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

相關文章
相關標籤/搜索