汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子A、B、C之间一次只能移动一个圆盘。编程实现:n个盘子的汉诺塔问题的移动步骤输入:(圆盘的数目)n输出:移动步骤例如当n=2时输出:A->BA->CB->C
举一反三
- 汉诺塔(Tower of Hanoi)是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。编写一个函数,用递归算法实现汉诺塔问题,输入A柱子上的盘子个数,打印输出搬动盘子顺序。
- 汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 以下程序使用递归的方法实现汉诺塔问题。函数Towers参数的含义如下:n是汉诺塔的层数,即圆盘的个数,fr是移动的起始柱子,to是移动到的目标柱子,spare是中间过渡的柱子。(需插入图片)[img=589x181]1803c838cd8c13b.png[/img]
- 完成具有5个圆盘的汉诺塔问题,需要移动圆盘的次数是(;)。
- n阶Hanoi塔问题:设有3各分别名为X,Y和Z的塔座,在塔座X上从上到下放有n各直径各不相同、编号一次为1,2,3,...,n的圆盘(直径大的圆盘在下,直径小的圆盘在上)现要求将X塔座上的n个圆盘移至Z上,并依然按同样的顺序叠放,且圆盘移动时必须遵循以下规则:(1)每次只能移动一个圆盘;(2)圆盘可以插在塔座x, Y和Z中任何一个塔座上;(3)任何时候都不能将一个大的圆盘压在一个小的圆盘之上。试编写一个递归程序实现该问题。
- 对于有64片圆盘的汉诺塔问题,如果每移动一次圆盘需要1秒,则一小时以内可以完成全部圆盘的移动。