Java程序:汉诺塔

来源:互联网 发布:财务预算软件 编辑:程序博客网 时间:2024/06/01 12:06

为了弄这个递归,简直快被逼疯。。。


package com.cskaoyan.sax;import java.util.Scanner;/*汉诺塔: * A柱子上从上倒下按从小到大的顺序放着n个圆盘,最终要将这些圆盘以同样的顺序移动到C柱子上 *如果只有1个圆盘,可直接从A移动到C上,只需移动1次 *否则,如果有那个圆盘 *先将A上的n-1个盘子借助C柱子移动到B,再将A上剩下的一个圆盘直接移动到C *      最后将B上的n-1个圆盘借助A移动到C *      */public class Hanoi {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入需要移动的盘子的个数n:");Scanner sc = new Scanner(System.in); int n = sc.nextInt();hanoi(n,'A','B','C');}//步骤计数器public static int step = 1;//最终的结果是将所有的圆盘都移动到C柱//先把剩下的n-1个圆盘看成一个,需要将他们从A柱借用柱C移动到B柱上,然后再将第n个圆盘直接移动到C柱上//接下来,是以n-1圆盘所在的B柱开始,执行同上一步相同的操作,即借助C,将n-2个圆盘移动到到A住上//其实可看作 (A)                                                                                                                    (B)//                         圆盘数        开始柱        借用柱           终点柱//方法:移动方法public static void hanoi(int n,char a,char b,char c){if(n == 1){move(n,a,c);}else{hanoi(n-1,a,c,b);//先将n-1个圆盘从A柱借用C柱移动到Bmove(n,a,c); //接下来,执行n-1个圆盘的汉诺塔hanoi(n-1,b,a,c);//再将n-1个圆盘从B柱借用A柱移动到C柱}}//方法:打印移动顺序public static void move(int n,char a,char b){   System.out.println("第"+step+"步,盘子"+n+"从"+a+"塔移到"+b+"塔");   step++;    }   }


0 0
原创粉丝点击