1. 程式人生 > >漢羅塔問題

漢羅塔問題

Hanoi

漢諾塔是一個發源於印度的益智遊戲,也叫河內塔。相傳它源於印度神話中的大梵天創造的三個金剛柱,一根柱子上疊著上下從小到大64個黃金圓盤。大梵天命令婆羅門將這些圓盤按從小到大的順序移動到另一根柱子上,其中大圓盤不能放在小圓盤上面。當這64個圓盤移動完的時候,世界就將毀滅。

好吧上面這個東西是我直接百度copy的.

這個源自孤古印度的遊戲, 還是有點意思的, 也和遞迴扯上關係.

但是我不明白的是, 能把這個問題轉為數學問題, 再以程式碼的形式實現, 為什麼要去把行為模擬出來?(百度很多程式碼都是把行為模擬了.)

因為我們在處理這個問題的時候, 移動羅盤的行為就已經在大腦中實現了, 我覺得關鍵是計算的結果. 當然我不是說過程就不重要, 只是體現了我在思考這個的遊戲的時候, 直接就去算結果了, 為了能夠用到遞迴, 我把的數量不同的羅盤的移動次數相加.

因為這個遊戲的數學公式表達為:
f ( n ) = 2 n

1 f(n) = 2^n - 1
比如我要移動64個羅盤:
f ( 64 ) =
2 64 1 f(64) = 2^{64} - 1

那麼我們把不同羅盤數量的移動次數相加:

#!/usr/bin/env python3
"""
	好吧, 是有點Low.
"""
def hanoi(n):
    if n >= 1:
        a.append(2**n-1)
        return hanoi(n-1)


if __name__ == '__main__':
    a = []
    x = int(input('enter: '))
    hanoi(x)
    print(sum(a))