图1-1 汉诺塔
1、汉诺塔游戏规则:
借助B杆把A杆的珠子移动到C杆,而不改变珠子的上下顺序,最少移动多少次?
(1) 每次只能移动1个珠子;
(2) 大珠子不能放在小珠子上面;
2、算法过程解析:
图1-2
步骤:
(1)若果A杆上一个珠子,直接将A杆的柱子移动到C,游戏结束;
(2)否则的话,假如是三个珠子。
把上面n-1个珠子从A借助B搬到C;
再把B上面n-1个珠子借助A搬到C;如图1-2
3、代码示例;
/**
*
* @param n
* a柱子上的盘片数量;
* @param a
* 柱子
* @param b
* 柱子
* @param c
* 柱子
* //这里代表将a柱子上的盘子借助b柱子移动到c柱子
*
*/
public static void Hanio(int n, String a, String b, String c) {
if (n == 1) {
System.out.println("移动" + n + "号盘片从" + a + "到" + c);
} else {
// 把上面n-1个盘片从a借助b搬到c;
Hanio(n - 1, a, c, b);
System.out.println("移动" + n + "号盘子从" + a + "到" + c);
Hanio(n - 1, b, a, c);// 再把b上的n-1个盘子借助a搬到c;
}
}