今天早晨在上班的路上,一好朋友忽然提到以前的一個計算機的考題,漢諾塔(相信你們都玩過)的遞歸深度。算法
因爲好久沒有看算法,以及腦容量有限,當時沒有多想。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
看來平時仍是要常常看下算法方面的書籍,要不就像初高中知識同樣被遺忘了。書籍