龙空技术网

汉诺塔游戏:递归经典问题

新疆科技馆 306

前言:

当前姐妹们对“c语言递归汉诺塔”大致比较讲究,看官们都需要学习一些“c语言递归汉诺塔”的相关知识。那么小编在网络上搜集了一些关于“c语言递归汉诺塔””的相关内容,希望大家能喜欢,兄弟们快快来了解一下吧!

汉诺塔游戏,是非常著名的智力趣味题,在很多算法书籍和智力竞赛中都有涉及。

汉诺塔游戏的基本规则是:在一块板子上,有三根编号分别为A、B、C的杆,在A杆上按自下而上、由大到小的顺序放置着64个(或其他数目)圆盘,每次只能移动一个圆盘,并且在移动过程中三根杆上都始终保持大盘在下、小盘在上的状态,操作过程中圆盘可以在A、B、C任意一杆上,要如何把A杆上的圆盘全部移到C杆上?

以3个圆盘为例:将3个圆盘按由小到大的顺序分别记作P1、P2、P3。按照规则将三个圆盘从A杆移至C杆,则需以下步骤:(1)先将P1移至C杆,再将P2移至B杆,然后将P1移至B杆,此时P1和P2均在B杆上(需3步);(2)将P3移至C杆(需1步);(3)将P1移至A杆,将P2移至C杆,最后将P1移至C杆(需3步)。

在此过程中,要将P3移至C杆,先将C杆当作中介,将P1移至C杆;再将P1、P2先移至B杆,借用B杆做中介;再将P2移至C杆时,又先将P1移至A杆,借用了A杆做中介。(总共7步完成)

以此为例,如何完成其他数量圆盘的移动操作呢?

当n=1时,只需将编号为1的圆盘从A柱直接移至C柱上即可。

当n=2时,利用B柱作为辅助柱,先将圆盘1移至B柱,再将圆盘2由A柱直接移至C柱,然后再将圆盘1由B柱移至C柱。

当n=3时,同样利用B柱作为辅助柱,依照上述原则,先设法将圆盘1、2移至B柱,待圆盘3由A柱移至C柱后,再依照上述原则设法将圆盘1、2移至C柱。

......

依此类推,当n>1时,需利用B柱作为辅助柱,先设法将压在编号为n的圆盘上的n-1个圆盘从A柱(依照上述原则)移至C柱,待编号为n的圆盘从A柱移至C柱后,再将B柱上的n-1个圆盘(依照上述原则)移至C柱。

游戏的移动操作很简单,但是如何将64个圆盘从一根杆子上移到另一根杆子上,并且始终保持上小下大的顺序,一共需要移动多少次才是让人头疼的问题。游戏过程中不难发现:不管把哪一个圆盘移到另一根杆子上,移动的次数都要比移动上面一个增加一倍。这样,移动第1个只需1次,第2个需2次,第3个需4次……第64个需263次。

奇妙的汉诺塔游戏所含有的数学知识饱含着人类的智慧。

文章转自:科普中国-科学原理一点通

标签: #c语言递归汉诺塔