大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
Hanoi
汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大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))
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182657.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...