有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:

每次只能移动一个圆盘; 大盘不能叠在小盘上面。 提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。

问:如何移?最少要移动多少次?


import java.util.Scanner;

public class demo_hnt {
	static int frequency = 0;

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入圆盘总数");
		int sum = input.nextInt();
		char src = 'a', tmp = 'b', dst = 'c';
		hanoi(sum, src, tmp, dst);
		System.out.printf("总共移动了%d次", frequency);

	}

	public static void move(int number, char src, char dst) {
		frequency++;
		System.out.printf("将 %d 号盘子 从 %s 移动到 %s 处\n", number, src, dst);

	}

	public static void hanoi(int n, char a, char b, char c) {
		if (n == 0) {
			return;
		} else {
			hanoi(n - 1, a, c, b);
			move(n, a, c);
			hanoi(n - 1, b, a, c);
		}
	}

}

参考链接:https://zh.wikipedia.org/zh-hans/%E6%B1%89%E8%AF%BA%E5%A1%94
https://www.cnblogs.com/songzehao/p/10854275.html
https://dmego.me/2016/10/16/hanoi