1:汉诺塔问题a经过b到c
/**
* 汉诺塔问题
* 目标:将a上的n个有序物体借助b移动到c
* 问题分解:
* n-1 : a经过c到b,b经过a到c
* note:3个节点执行2轮
*/
public static void hanoiTower(int n, char a, char b, char c) {
if (n == 1) {
System.out.println("移动由上到下第" + n + "个从" + a + "->" + c);
return;
}
// 将n-1个从a经由c到b
hanoiTower(n - 1, a, c, b);
// 移动底层物体
System.out.println("移动由上到下第" + n + "个从" + a + "->" + c);
// 将n-1个从b经c到a
hanoiTower(n - 1, b, c, a);
}
2:同样的思路,不同的出发点,帮助深入理解
public static void hanoiTowerChange(int n, char a, char b, char c) {
if (n == 1) {
System.out.println("移动由上到下第" + n + "个从" + a + "->" + b);
return;
}
hanoiTowerChange(n - 1, a, c, b);
System.out.println("移动由上到下第" + n + "个从" + a + "->" + b);
hanoiTowerChange(n - 1, c, b, a);
}