java代码
public void hannoi(int num, String from, String with, String to) {
if (num == 1) {
// 递归出口!
System.out.println("盘子:" + 1 + from + ">>>>" + to);
} else {
hannoi(num - 1, from, to, with);
System.out.println("盘子:" + num + from + ">>>>" + to);
hannoi(num - 1, with, from, to);
}
}
n 盘子数,a 起始柱 ,b 中间柱,c 目标柱
1.将底盘上的n-1个盘子移动到b柱,
hannoi(num - 1, from, to, with);
2.将底盘(最大盘)移动到目标柱c柱
System.out.println("盘子:" + num + from + ">>>>" + to);
3.底盘已在目标柱,现在的起始柱是b柱,中间柱是a柱,目标柱还是c柱,需要将b上的n-1个盘子移动到a柱
hannoi(num - 1, with, from, to);
当本次动作完成后,下面的两个大盘已经到目标柱上,此时的状态回到初始状态a起始柱,b中间柱,c目标柱。
现在调用本身,即 递归。
故上述代码。
代码二
void Hanoi(int n, char a, char b, char c)
{
if(n == 1)
{
Move(a, c);
}
else
{
Hanoi(n-1, a, c, b); /*将a柱子n-1个圆盘移动到b柱子*/
Move(a, c); /*将a剩下的一个圆盘移动到c*/
Hanoi(n-1, b, a, c); /*再把b上暂时放着的n-1个圆盘移动到a*/
}
}
void Move(char a, char b)
{
printf("Move 1 disk: %c ---------> %c\n", a, b);
}