1 / 14
文档名称:

汉诺塔问题.doc

格式:doc   大小:107KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

汉诺塔问题.doc

上传人:2072510724 2019/10/29 文件大小:107 KB

下载得到文件列表

汉诺塔问题.doc

文档介绍

文档介绍:汉诺塔百科名片  汉诺塔初始状态汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。目录由来来源传说预言汉诺塔与宇宙寿命concreteHAM:在分析(2)之前讨论问题(2),算法介绍:汉诺塔问题的程序实现汉诺塔问题的递归实现:汉诺塔问题的非递归实现汉诺塔问题的递归Java语言实现汉诺塔问题的递归pascal语言实现由来来源传说预言汉诺塔与宇宙寿命concreteHAM:在分析(2)之前讨论问题(2),算法介绍:汉诺塔问题的程序实现汉诺塔问题的递归实现:汉诺塔问题的非递归实现汉诺塔问题的递归Java语言实现汉诺塔问题的递归pascal语言实现展开编辑本段由来来源汉诺塔是源自印度神话里的玩具。上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。传说在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里需要递归的方法。假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此后不难证明f(n)=2^n-1。n=64时, f(64)=2^64-1=18446744073709551615 假如每秒钟一次,共需多长时间呢?一个平年365天有31536000秒,闰年366天有31622400秒,平均每年31556952秒,计算一下, 18446744073709551615/31556952=,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。和汉诺塔故事相似的,还有另外一个印度传说:舍罕王打算奖赏国际象棋的发明人──宰相西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个小格里赏给我一粒麦子,在第2个小格里给2粒,第3个小格给4粒,以后每一小格都比前一小格加一倍。请您把这样摆满棋盘上所有64格的麦粒,都赏给您的仆人吧!”国王觉得这个要求太容易满足了,就命令给他这些麦粒。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就是把全印度甚至全世界的麦粒全拿来,也满足不了那位宰相的要求。那么,宰相要求得到的麦粒到底有多少呢?总数为 1+2+2^2+…+2^63=2^64-1 和移完汉诺塔的次数一样。我们已经知道这个数字有多么大了。人们估计,全世界两千年也难以生产这么多麦子!预言有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今还在一刻不停地搬动着圆盘。汉诺塔与宇宙寿命如果移动一个圆盘需要1秒钟的话,等到64个圆盘全部重新落在一起,宇宙被毁灭是什么时候呢? 让我们来考虑一下64个圆盘重新摞好需要移动多少次吧。1个的时候当然是1次,2个的时候是3次,3个的时候就用了7次......这实在是太累了因此让我们逻辑性的思考一下吧。 4个的时候能够移动最大的4盘时如图所示。到此为止用了7次。接下来如下图时用1次,在上面再放上3个圆盘时还要用7次(把3个圆盘重新放在一起需要的次数)。因此,4个的时候是“3个圆盘重新摞在一起的次数”+1次+“3个圆盘重新摞在一起需要的次数”=2x“3个圆盘重新摞在一起的次数”+1次=15次。那么,n个的时候是 2x“(n-1)个圆盘重新摞在一起的次数”+1次。由于1个的时候是1次,结果n个的时候为(2的n次方减1)次。 1个圆盘的时候2的1次方减1 2个圆盘的时候2的2次方减1 3个圆盘的时候2的3次方减1 4个圆盘的时候2的4次方减1 5个圆盘的时候2的5次方减1 ........ n个圆盘的时候2的n次方减1 也就是说,n=64的时候