经典汉诺塔(Java实现)

题目要求

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