java采用分治算法实现汉诺塔的移动问题

package suanfa.dac;
/**
 * 分治算法实现汉诺塔的程序
 * @author Dell
 *
 */
public class hannotower {
	public static void main(String[] args) {
		hannoTowerMove(4, 'A', 'B', 'C');
	}
	/**
	 * 分治算法的思路:将num-1个盘子先从A移到B 再将第num个盘子从A->C 
	 * 最后将num-1个盘子从B移到C  如此的递归分治
	 * @param num  需要移动的盘子的数量
	 * @param A		A号柱子
	 * @param B		B号柱子
	 * @param C		C号柱子
	 * 方法的意思是 将num个盘子从A通过B移动到C
	 */
	public static void hannoTowerMove(int num,char A,char B,char C) {
		if(num==1) {
			System.out.println("将"+num+"号盘子从"+A+"->"+C);
		}else {
			//将num-1个盘子从A->B 通过C
			hannoTowerMove(num-1,A,C,B);
			//将第num个盘子之间从A移动到C
			System.out.println("将"+num+"号盘子从"+A+"->"+C);
			//将剩下的num-1个盘子从B通过A移动到C
			hannoTowerMove(num-1, B, A, C);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值