汉诺塔问题 – 分治算法的最佳实践
public class Hannuota {
public static void main(String[] args) {
hannuota(2, 'A', 'B', 'C');
}
/**
* 汉诺塔问题
* 从 A 移动到 C
* @param num 需要移动几个盘子
* @param a A 杠
* @param b B 杠
* @param c C 杠
*/
public static void hannuota(int num, char a, char b, char c){
if(num == 1){
System.out.println("第 " + num + "盘子从 " + a + "-->" + c);
}
if(num >= 2){
// 总的来看,总是可以把汉诺塔看成两个部分
hannuota(num - 1, a, c, b); // 意思是将上面的 num - 1 个盘子 从 a 通过 c 移动到 b
// 将最底下的一个盘子移动到 c
System.out.println("第 " + num + "盘子从 " + a + "-->" + c);
// 将 num - 1 个上部分的盘子从 b 移动到 c
hannuota(num - 1, b, a, c); // 从 b 通过 a 移动到 c
}
}
}