汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。
好吧上面这个东西是我直接百度copy的.
这个源自孤古印度的游戏, 还是有点意思的, 也和递归扯上关系.
但是我不明白的是, 能把这个问题转为数学问题, 再以代码的形式实现, 为什么要去把行为模拟出来?(百度很多代码都是把行为模拟了.)
因为我们在处理这个问题的时候, 移动罗盘的行为就已经在大脑中实现了, 我觉得关键是计算的结果. 当然我不是说过程就不重要, 只是体现了我在思考这个的游戏的时候, 直接就去算结果了, 为了能够用到递归, 我把的数量不同的罗盘的移动次数相加.
因为这个游戏的数学公式表达为:
f ( n ) = 2 n − 1 f(n) = 2^n - 1 f(n)=2n−1
比如我要移动64个罗盘:
f ( 64 ) = 2 64 − 1 f(64) = 2^{64} - 1 f(64)=264−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))