游戏规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
解题思路:可以将此问题宏观上拆分为三个子问题:
1.将A上的n-1个盘子移动到C上
2.将A上的第n个盘子移动到C上
3.将B上的n-1个盘子移动到C上
代码:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入圆盘的数量");
int num=sc.nextInt();
hanno(num,'A','B','C');
}
public static void hanno(int n,char a,char b,char c){
//base case,当n=1时,直接从A->C
if(n==1){
System.out.println("第"+n+"个圆盘从"+a+"->"+c);
}else {
//将n-1个圆盘从A移动到B,C作为辅助
hanno(n - 1, a, c, b);
//将第n个圆盘从A移动到C
System.out.println("第" + n + "个圆盘从" + a + "->" + c);
//将n-1个圆盘从B移动到C,A作为辅助
hanno(n - 1, b, a, c);
}
}
执行结果: