Java经典算法——汉诺塔问题

时间:2021-03-14 11:19:47

题目:

Java经典算法——汉诺塔问题

最大圆盘在最底,其余依次叠上去,依次减小,现要求将圆盘逐个移动到另一根杆上,规定一次只能移动一个,且小的只能放到大的上面。


import java.util.Scanner;

public class Hanoi {

private static int count;

public static void main(String[] args) {
int n;
Scanner sc=new Scanner(System.in);

System.out.print("请输入圆盘数量:");
n=sc.nextInt();

count=0;//表示移动的步数
hanoi(n,'X','Y','Z');//三根杆分别为'X','Y','Z'

sc.close();
}

private static void hanoi(int n, char x, char y, char z) {

/*
当n=1时,将圆盘从第一杆移动到第三杆;

当n>1时,把圆盘看作两部分,第一部分是最底层的圆盘,第二部分就是除了最底层之外的所有圆盘的总和,
第一步:将第一部分的圆盘从第一杆移动到第二杆;
第二步:将第二部分的圆盘从第一杆移动到第三杆
第三步:将第一部分的圆盘从第二杆移动到第三杆
*/


if(n==1){
System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
}else{
hanoi(n-1,x,z,y);
System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
hanoi(n-1,y,x,z);
}

}

}