Java 代码:
import java.util.Scanner;
public class Hanoitower {
// 算法思想:
// 1、分治算法:分而治之,关键在于怎么分
// 2、递归
/**
* 将 n 个盘子,从 a 经过 b 移动到 c
*
* @param n
* @param a
* @param b
* @param c
*/
private static void hanoi(int n, char a, char b, char c) {
if (n == 1) {
// 当只有 1 个盘子的时候,直接从 a 移动到 c,无须经过 b
move(1, a, c);
return;
}
// 当不止 1 个盘子的时候,分 3 步
// 1、将 n - 1 个盘子,从 a 经过 c 移动到 b
hanoi(n - 1, a, c, b);
// 2、将第 n 个盘子从 a 移动到 c,无须经过 b
move(n, a, c);
// 3、将 n - 1 个盘子从 b 经过 a 移动到 c
hanoi(n - 1, b, a, c);
}
private static void move(int num, char from, char to) {
System.out.println("第 " + num + " 个盘子从 " + from + " 到 " + to);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入汉诺塔的层数:");
String input = scanner.next();
hanoi(Integer.parseInt(input), 'a', 'c', 'b');
}
}