代码
public class Hanoi {
public static void main(String[] args) {
move(3, "A", "B", "C");
}
static void move(int n, String a, String b, String c) {
if (n == 1) {
System.out.println("move" + n + "from" + a + "to" + c);
return;
}
move(n - 1, a, c, b);
System.out.println("move" + n + "from" + a + "to" + c);
move(n - 1, b, a, c);
}
}
理解
汉诺塔问题需要跟据递归思路,层层迭代,下面我们将汉诺塔从上而下分别计为1~n,跟着代码来理解此算法
- 先想如果只有一个塔会怎样,move(1,a,b,c)
if (n == 1) {
System.out.println("move" + n + "from" + a + "to" + c);
return;
}
- 再想如果有两个塔要怎样移动,move(2,a,b,c)
1.将1从a移动到b
—move(1,a,c,b)移动结束返回上一层
2.将2从a移动到c
—System.out.println(“move” + 2 + “from” + a + “to” + c);
3.将1从b移动到c
—move(1,b,a,c)
move(n - 1, a, c, b);
System.out.println("move" + n + "from" + a + "to" + c);
move(n - 1, b, a, c);
- 如果是三个呢,调用move(3,a,b,c)
1.将1~2从a移动到b
—move(2,a,c,b)调用移动两层汉诺塔的方法
2.将3从a移动到c
—System.out.println(“move” + 3 + “from” + a + “to” + c);
3.将1~2从b移动到c
—move(2,b,a,c)调用移动两层汉诺塔的方法 - 如果是四个呢
1.将1~3从a移动到b
—move(3,a,c,b)调用移动两层汉诺塔的方法
2.将4从a移动到c
—System.out.println(“move” + 4 + “from” + a + “to” + c);
3.将1~3从b移动到c
—move(3,b,a,c)调用移动两层汉诺塔的方法 - …