很多孩子第一次见到汉诺塔问题时,估计都是一头雾水吧!也许你最终可以在网上找到标准答案,但是真正理解了它的求解过程的人应该是少之又少了。今天我们就来给大家详细的讲解一下汉诺塔问题的求解过程。所谓知己知彼,百战不殆。在正式开始分析问题前,先来听一段故事:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,但不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
![fd6d5850bd5f6b80c7b7c1a4a5e0f8d3.png](https://i-blog.csdnimg.cn/blog_migrate/92139f6b122a657578e78c1dcf347c04.jpeg)
64片金片太多,可以让小朋友们从简单的开始。假设3根柱子是A, B, C。1个盘片:需要移动1次,2个盘片:需要移动3次,3个盘片:需要移动7次,具体地,要把3个盘片从A号柱子搬到C号柱子,那么应该首先将上面两个1,2号盘片搬到B号柱子(移动3次),然后将最底下的3号盘片搬到C号柱子,然后再将1,2号盘片从B号柱子搬到C号柱子(移动3次)。此时,实际上已经发现了相同结构的但规模更小的问题。也就是移动3个盘片,可以利用之前移动2个盘片的结果。
在此基础上,将N个盘片从A号柱移动到C号柱,我们不知道怎么做,但如果我们能首先把N-1个盘片从A号柱移动到B号柱,再把最底下的那个盘片从A号柱移动到C号柱,最后再把B号柱的N-1个盘片移动到C号柱,这个问题就解决了。在移动上面N-1个盘片的时候,由于底下的盘片最大,所以可以假设它并不存在。因此F(N)=2×F(N-1)+1。
![df7175c5c8da2df4aab74c82fa2010dd.gif](https://i-blog.csdnimg.cn/blog_migrate/0a8f85d86b71f5a05f1b230b11b1949f.gif)
也就是说按这一递推关系,这个序列是1,3,7,15,31,63,127, …。可以看出,n个盘片移动的次数是2ⁿ-1。成功移动64个盘片需要18446744073709551615次。假如每移动一个盘片花1秒,并且这些僧侣能够正确无误地移动每一步的话(我是不相信的),需要花大约6000亿年才能完成且不论这个传说是否可信,单从数学角度分析,如果每秒移动一片金片的话,则移完所有的金片至少需要5845.54亿年。到了那个时候,不要说地球了,估计太阳系都灰飞烟灭了吧(太阳寿命还剩大约50亿年)!从这个角度看,这些僧侣们还真没忽悠人,甚至还有人相信婆罗门至今还在不停的移动圆盘。
汉诺塔问题是一个经典递归问题,汉诺塔问题在数学界有很高的研究价值,而且至今还在被一些数学家们所研究,也是我们所喜欢玩的一种益智游戏,它可以帮助开发智力,激发我们的思维。简化这一问题,我们先从这一简单情形说起,也能体会问题内在的韵味及魅力.先看看这一问题变形版本吧。
![9d2ea744a8a054339ffbd75a4401d5fa.gif](https://i-blog.csdnimg.cn/blog_migrate/22c919a006537ac022faaecd5e7d898c.gif)
问题:相传古印度一座梵塔圣殿中,铸有一片巨大的黄铜板,之上树立了三米高的宝石柱,其中一根宝石柱上插有中心有孔的64枚大小两两相异的一寸厚的金盘,小盘压着较大的盘子,如图,把这些金盘全部一个一个地从1柱移到3柱上去,移动过程不许以大盘压小盘,不得把盘子放到柱子之外.移动之日,喜马拉雅山将变成一座金山.
设h(n)是把n个盘子从1柱移到3柱过程中移动盘子之最少次数
n=1时,h(1)=1;
n=2时,小盘→2柱,大盘→3柱,小盘从2柱→3柱,完成.即h(2)=3;
n=3时,小盘→3柱,中盘→2柱,小盘从3柱→2柱.[即用h(2)种方法把中、小两盘移到2柱,大盘3柱;再用h(2)种方法把中、小两盘从2柱3柱,完成;
我们没有时间去移64个盘子,但你可由以上移动过程的规律,计算n=6时,h(6)=( )
![1aece1fc3e01b71015671a335883d2a7.png](https://i-blog.csdnimg.cn/blog_migrate/2fb8964da26d33488d521a0e8b45a78f.jpeg)
A.11 B.31 C.63 D.127
【分析】根据移动方法与规律发现,随着盘子数目的增多,都是分两个阶段移动,用盘子数目减1的移动次数都移动到2柱,然后把最大的盘子移动到3柱,再用同样的次数从2柱移动到3柱,从而完成,然后根据移动次数的数据找出总的规律求解即可.
【解答】根据题意,n=1时,h(1)=1,
n=2时,小盘→2柱,大盘→3柱,小盘从2柱→3柱,完成,即h(2)=3=2²﹣1;
n=3时,小盘→3柱,中盘→2柱,小盘从3柱→2柱,[用h(2)种方法把中、小两盘移到2柱,大盘3柱;再用h(2)种方法把中、小两盘从2柱3柱,完成],
h(3)=h(2)+h(2)+1=3×2+1=7=2³﹣1,
h(4)=h(3)+h(3)+1=7×2+1=15=2^4﹣1,
…
以此类推,h(n)=h(n﹣1)+h(n﹣1)+1=2ⁿ﹣1,
∴h(6)=2^6﹣1=64﹣1=63.故选:C.
【点评】本题考查了图形变化的规律问题,根据题目信息,得出移动次数分成两段计数,利用盘子少一个时的移动次数移动到2柱,把最大的盘子移动到3柱,然后再用同样的次数从2柱移动到3柱,从而完成移动过程是解题的关键,本题对阅读并理解题目信息的能力要求比较高.
![fd5082c564e6e8d19a8185dfdadf34a7.png](https://i-blog.csdnimg.cn/blog_migrate/85d8968f5c3d4846c1869b6d54593c13.jpeg)
变式1.老王和小王父子俩玩一种类似于古代印度的"汉诺塔游戏";有3个柱子甲、乙、丙,在甲柱上现有4个盘子,最上面的两个盘子大小相同,从第二个盘子往下大小不等,大的在下,小的在上(如图),把这4个盘子从甲柱全部移到乙柱游戏即结束,在移动过程中每次只能移动一个盘子,甲、乙、丙柱都可以利用,且3个柱子上的盘子始终保持小的盘子不能放在大的盘子之下,设游戏结束需要移动的最少次数为n,则n=( )
![fca26bc142272cff7d21a30903f3e0d2.png](https://i-blog.csdnimg.cn/blog_migrate/d6e3962f114ec0eff08bc58885aa48e4.jpeg)
A.15 B.11 C.8 D.7
【解答】由题意得,根据甲乙丙三图可知最上面的两个是一样大小的,
所以比三个操作的此时(2³﹣1)要多,此四个操作的此时(2^4﹣1)要少,
相当与操作三个的时候,最上面的那个动了几次,就会增加几次,故选:B.
【点评】本题考查了图形变化的规律问题,根据题目信息,得出移动次数分成两段计数,利用盘子少一个时的移动次数移动到乙盘,再把最大的盘子移动到丙盘,然后再用同样的次数从乙柱移动到丙柱,从而完成移动过程是解题的关键,本题对阅读并理解题目住处的能力要求比较高.试题
变式2.小张和小王两位同学课余时间玩一种类似于古代印度的" 汉诺塔游戏".有甲、乙丙3个柱子,甲柱子上有n(n≥3)个盘子,从上往下大小不等,大的在下,小的在上(如图),把这n个盘子从甲柱子全部移到乙柱子上游戏结東,在移动过程中每次只能够移动一个盘子,甲、乙、丙3个柱子都可以利用,且3个柱子上的盘子始终保持小的盘子不能放在大的盘子
![d5cb7d25d6398afbaaf85b03b5b9055a.png](https://i-blog.csdnimg.cn/blog_migrate/5b3b35ae9d33ae49c676d700a05ef0c1.jpeg)
【点评】本题考查的知识要点:数列的通项公式的求法及应用,主要考查学生的运算能力和转化能力,属于基础题型.
![50b3c4425bc92fa4784532a11906f1f5.png](https://i-blog.csdnimg.cn/blog_migrate/c41ff11723b3556b8a8b028a8fd4e194.jpeg)
变式3.古代印度婆罗门教寺庙内的僧侣们曾经玩过一种被称为"汉诺塔问题"的游戏,其玩法如下:如图,设有n(n∈N*)个圆盘依其半径大小,大的在下,小的在上套在A柱上,现要将套在A柱上的盘换到C柱上,要求每次只能搬动一个,而且任何时候不允许将大盘套在小盘上面,假定有三根柱子A、B、C可供使用.
![e807a43240311fc5365c6a1a2c1cbac0.png](https://i-blog.csdnimg.cn/blog_migrate/f1120840f8b9b7a51d3dc8fbb20606d8.jpeg)
本题的(1)问关键是从特殊中发现一般性的规律,考查构造法求数列的通项;(2)问体现等价转化的数学思想,同时应注意放缩法的运用.
![0c3a5365c3b1e91fe2db2fb13199a8a9.png](https://i-blog.csdnimg.cn/blog_migrate/b9792c486a76c5c212eea5340d23efb6.jpeg)
![cd9c9914bc55f630104a18764f4889f9.png](https://i-blog.csdnimg.cn/blog_migrate/58871d27fbfe2e4e53365466ccafdc82.jpeg)
![0786c38e78eead43b5af398447de3693.png](https://i-blog.csdnimg.cn/blog_migrate/ebc0d9c8db6acc2a96e3294f24cf0aea.jpeg)
汉诺塔问题(游戏)还有个最关键的问题就是第一步的第一小步是将顶层圆盘挪至辅助柱还是还是目标柱的问题。说它关键,是因为一步错,步步错。第一步走错了,后面再怎么走,也不会走对。那这关键的第一步该怎么走呢?经过推理与分析,找到了问题的答案:若塔层数为奇数,顶层圆盘应首先放在目标柱;若是偶数,则放在辅助柱。这就是汉诺塔,一款起源于印度古老传说的简单而又不那么简单的益智小游戏。从汉诺塔游戏中的规律可发现汉诺塔游戏中蕴藏着丰富的数学内容,因此,玩好汉诺塔游戏不仅可以从中获得游戏的快乐,而且还能够从中学到很多数学知识,体会很多数学思想与数学方法。小游戏中蕴含大智慧,虽然比赛结束了,但是游戏精神,思维模式会伴随着孩子的成长,使孩子们终生受益。
狗尾续貂说一点,递归在计算机中占有极为重要的地位,从形式化定义到算法,它的身影无处不在。可以这么说,对初涉编程的人,是否会用递归思维去解决问题是一名普通程序员迈向一名优秀程序员的一大门槛。从小让孩子具备一些递归思维,汉诺塔游戏是学习编程优质素材,或许会让孩子学习编程容易一点,在未来受益匪浅。