题目要求
1.利用递归实现汉诺塔。
2.可以输入首次想要的层数与停止层数,当遇到停止层数时,停止输出。
package Hanoi;
import java.util.*;
public class Hanoi {
static int i = 1;
public static void Hanoi(int n,char X,char Y,char Z) {
if(n==1) // 只有一个盘片的情况
{
System.out.printf("第%d次移动:%d号圆盘,%c-->%c\n",i,n,X,Z);
i++; //次数+1
}
else {
Hanoi(n-1,X,Z,Y); // 有两个或者多个盘片的情况
System.out.printf("第%d次移动:%d号圆盘,%c-->%c\n",i,n,X,Z);
i++; //次数+1
Hanoi(n-1,Y,X,Z);
}
}
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
System.out.print("请输入想要的层数:");
int r= in.nextInt();
System.out.print("请输入想要停止的层数:");
int stop= in.nextInt();
// 使用do-while可以确保输出第一次输入的数
do {
Hanoi(r,'X','Y','Z');
i=1; // 重置全局变量i
if(r==stop) { // 当层数与停止层数相同时,直接跳出循环
break;
}
System.out.print("请重新输入层数,并开始下次执行");
r= in.nextInt();
}
while(r!=stop);
System.out.print("循环已结束");
// 直接使用whlie会使第一个输入的时候,停止层数和想要的层数相同的话,第一次循环无法执行
// while(r!=stop) {
// Hanoi(r,'X','Y','Z');
// i=1; // 重置全局变量i
// System.out.print("请重新输入层数,并开始下次执行");
// r= in.nextInt();
// }
// System.out.print("循环已结束");
}
}