`
endual
  • 浏览: 3510688 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 汉诺塔递归实现

    博客分类:
  • java
 
阅读更多

 

汉诺塔的问题:这个问题在以前也敲过代码,但是算法和数据结构在平时的时候,就是用不到,
这就导致了,过一段时间,我忘记了,而且忘记的一干二净,绝不留下,这也很佩服自己啊。
有要面试笔试了,很痛苦啊,这种感觉,linux,算法,数据结构,数据库,java框架,android,
等等好多都没有系统的复习,真是奔命啊。。。

网上转了一份汉诺塔的代码:添加了一些代码,其中的原理无法猜透,将就着用吧,希望笔试面试的
时候用到:

package job;

public class Hannuota {

	public Hannuota() {
	}

	public static void main(String args[]) {
		int disks = 64;// 这是盘子的个数(可以更改)
		final int source = 1;// 这是所有盘子初始位置(都是在第一根柱子上),这个最好不要改
		final int desk = 3;// 这是所有盘子最终位置(都是在第三根柱子上),这个最好不要改
		final int spare = 2;// 这是用于临时存放盘子的位置(也就是第二根柱子),这个最好不要改
		yidong(disks, source, desk, spare);
	}
	/**
	 * 
	 * @param disks 盘子的个数
	 * @param source 放盘子原始的棒的名字:我们称呼为 1
	 * @param desk   放盘子最后的棒的名字:我们称呼为3
	 * @param spare  放盘子中间的棒的名字:我们称呼为2
	 */
	public static void yidong(int disks, int source, int desk, int spare) {// 这是递归方法
		// 如果只有一个盘子,那就直接从source(柱子一)移动到desk(柱子三)
		if (disks == 1) {
			System.out.println(source + "=>" + desk);

		} 
		else {
			yidong(disks - 1, source, spare, desk); // 除了最小面一个盘子,把这些盘先移动到中间的盘去
			System.out.println(source + "=>" + desk); //最下面盘子转移,打印信息
			yidong(disks - 1, spare, desk, source); //再把盘子从中间的棒的位置专业到最后一个棒去

		}

	}

}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics