Java程序:汉诺塔

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

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 stub
		
		System.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柱移动到B
			move(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++;
    }  	 
}
    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/dezzzzzzz/article/details/54234504
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞