汉诺塔问题就是利用递归的思想,从开始一个盘子时,直接将盘子从开始位置移动到结束位置;到有两个盘子,先将上面的盘子从开始位置移动到中间位置,接着将下面的盘子从开始位置移动到结束位置,最后将中间位置的盘子移动到结束位置;到有n个盘子,先将上面n-1个盘子从开始位置移动到中间位置,接着将下面的第n个盘子从开始位置移动到结束位置,最后将中间位置的n-1个盘子移动到结束位置。代码如下:
public class Hanoi {
public static void main(String[] args) {
hanoi(4, 'A', 'B', 'C');
}
public static void hanoi(int n, char start, char mid, char end) {
//当只有一个盘子时,直接将盘子从开始位置移动到结束位置
if (n == 1) {
System.out.println("将第1个盘子从" + start + "移动到" + end);
} else {
//将上面n-1个盘子从开始位置移动到中间位置
hanoi(n - 1, start, end, mid);
//将第n个盘子从开始位置移动到结束位置
System.out.println("将第" + n + "个盘子从" + start + "移动到" + end);
//将n-1个盘子从中间位置移动到结束位置
hanoi(n - 1, mid, start, end);
}
}
}