龙空技术网

2的n次方的应用——汉诺塔

西铁成2000 2006

前言:

现在看官们对“c语言二的n次方”大约比较注意,我们都需要剖析一些“c语言二的n次方”的相关知识。那么小编同时在网上汇集了一些有关“c语言二的n次方””的相关资讯,希望各位老铁们能喜欢,各位老铁们一起来了解一下吧!

有一个故事,说的是一个国王要赏赐一个大臣,就让他自己提一个方案。大臣说:“我的要求不高,只要在棋盘的第一个格子里装1粒米,第二个格子里装2粒,第三个格子装4粒,第四个格子装8粒,以此类推,直到把64个格子装完。”国王一听,暗暗发笑,要求太低了,照办!

装米的工作进展神速,不久棋盘就装不下了,改用麻袋,麻袋也不行了,改用小车,小车也不行了,粮仓很快告罄。数米的人累昏无数,那格子却像一个无底洞,越来越填不满。国王终于发现,他上当了,一个东西哪怕基数很小,一旦以几何级数成倍增长,最后的结果也会骇人听闻。

这个故事很多人都听过,还有一个汉诺塔的故事相信很多人也听过

相传在印度的贝纳雷斯有座大寺庙,寺庙内有一块红木板,上面插着三根钻石棒,在盘古开天地,世界刚创造不久之时,神便在其中的一根钻石棒上放了64枚纯金的圆盘。有一个叫婆罗门的门徒,不分日夜地向这座寺庙赶路,抵达后,就尽力将64枚纯金的圆盘移到另一根钻石棒上。等到婆罗门完成这项工作,寺庙和婆罗门本身都崩溃了,世界在一声霹雳中也毁灭了。

这两个故事其实都用到了2的n次方。

国王的米粒很简单,

第1个格子是2的0次方1

第2个格子是2的1次方2 前2个格子总和恰好是3,也就是2的2次方=4-1

第3个格子是2的2次方4 前3个格子总和恰好是7,也就是2的3次方=8-1

......

大家已经发现,1,2,4,8,16.……

2的n次方这些数,前面所有数加起来,恰好等于下一个数减1.

这是因为2的n次方具有唯一性,不清楚可参考前文

2的n次方在数学中的作用(1)二进制

第64个格子是2的63次方 这64个格子的总和就是2的64次方减1

关于汉诺塔问题我们用递归的方法来归纳,有一个原则,大圆盘不能盖在小圆盘上面

如果有1个圆盘

      第1次 1号盘 A---->C 共1 次

如果有2个圆盘

      第1次 1号盘 A---->B

       第2次 2号盘 A---->C

      第3次 1号盘 B---->C 共3 次

这里我们需要记住,移动2个圆盘我们用了3次,过程也要清晰记得

如果有3个圆盘

        第1次 1号盘 A---->C

        第2次 2号盘 A---->B

        第3次 1号盘 C---->B

        第4次 3号盘 A---->C

        第5次 1号盘 B---->A

        第6次 2号盘 B---->C

        第7次 1号盘 A---->C 共 7 次

具体思路就是,刚前2个圆盘怎么移动的,用了3次没有忘记吧,我们只需要把第3个圆盘移动到空柱子上,再重复一遍移动2个圆盘的过程就可以了,3+1+3=7

如果有4个圆盘

同理,刚3个圆盘的移动过程还记得吗,一共7次,我们只需要把第4个圆盘移动到空柱子上,再重复一遍移动3个圆盘的过程就可以了,7+1+7=15

后面就不再举例了,过程同上,理论上,汉诺塔问题如何移动已经轻松破解了。

那我们有没有发现这些数有什么规律呢 1,3,7,15

对应2的n次方2,4,8,16

结论就是移动几个圆盘需要的次数就是2的几次方减1

移动64个圆盘需要移动2的64次方减1次

假如我手指翻飞,动得飞快,1秒钟就移动1次,不吃不喝不睡觉的情况下,需要移动大概5800多亿年,地球现在寿命46亿年,太阳寿命不到100亿年。所以这个末日问题不是我们需要担心的,大家可以安心地睡觉了。

本文由西铁成2000原创,欢迎关注,带你一起长知识。

标签: #c语言二的n次方