栈与递归的简单使用:Hanoi塔小问题

  笔者今天在看数据结构中书的时候,发现其中一个关于介绍Hanoi塔的小节,里面的内容非常有意思(书是严蔚敏的数据结构,章节是第三章第三小节),于是自己尝试了下手动实现代码解决Hanoi塔问题,意在加深理解栈与递归的使用。摘录自己的实现过程:

  • 环境:Win10+Eclipse+jdk1.8
  • 代码:
package henu_xb;

public class Hanoi {
	public Hanoi() {
		System.out.println("游戏开始!");
	}

	/**
	 * 将塔座上的num个圆盘按从小到大的顺序,借助y柱从x柱移动到z柱上。
	 * @param num 多少个圆盘
	 * @param x 待移动的柱
	 * @param y 辅助柱
	 * @param z 目标柱
	 */
	public void MyHanoi(int num, char x, char y, char z) {
		
		if (num == 1) {
			//将编号1的圆盘从x柱移到z柱。
			MyMove(1, x, z);
		} else {
			// 将除第num个圆盘外的其它盘通过z柱从x柱移动到y柱上
			MyHanoi(num - 1, x, z, y);
			// 将编号为num的盘从x柱移动到z柱
			MyMove(num,x,z);
			// 再将除第num个圆盘外的其它盘通过x柱从y柱移动到z柱上
			MyHanoi(num -1, y, x, z);
		}
	}

	/**
	 * 将编号为 no的圆盘从sou柱上移动到des柱上
	 * @param no 编号            
	 * @param sou
	 * @param des
	 */
	public void MyMove(int no, char sou, char des) {
		System.out.println(String.format("记录:编号为 %s 的圆盘从 %s 柱上移到了 %s 柱上!",no,sou,des));
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Hanoi h = new Hanoi();
		char x = 'x';
		char y = 'y';
		char z = 'z';
		h.MyHanoi(3, x, y, z);
	}

}

  OK,就先记录到这!

转载于:https://my.oschina.net/u/3744313/blog/1647888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值