题目要求
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("循环已结束"); } }