问题描述:假设有三个分别命名为x,y,z的塔座,在塔座x上插有n个直径大小各不相同,且从小到大编号分别为1,2,..,n的圆盘,现要求将塔座x上的n个圆盘借助塔柱y移动到塔柱z,且仍按相同顺序叠排,圆盘移动时需遵循以下规则:
1) 每次只能移动一个圆盘
2)圆盘可以插在x,y,z中的任何一个塔座上
3)任何时刻不能将较大的圆盘压在较小的圆盘上
涉及变量:x,y,z:char型变量,三个塔座
move:int型变量,移动的次数
n:在两个方法中有不同的意义
涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社
大致思路:
利用递归思路,通过对hanoi()不断的调用来达成目的
move函数是书写将编号为n的圆盘从所给的x塔座移动到z塔座
hanoi()考虑了三种情况,n<1,n为1和n>1的情况
当n<1时,其不符合实际情况,抛出异常,终止程序的运行
当n=1时,有且只有1个圆盘,直接将其从x塔座移动到z即可
当n>1时,从逻辑上来看,先将上面n-1个圆盘经由z的帮助移动到y,再将第n个圆盘移动到z,最后将n-1个圆盘经由x从y移动到z
这n-1个圆盘在不断的递归中直到取到编号为1的盘子之后才依次返回,开始执行下一步的move()和hanoi()
代码如下:
以上是我对汉诺塔问题的一些看法,希望对各位有所帮助
190121 Rewivy