递归经典问题:汉诺塔游戏

游戏介绍

在这里插入图片描述
要求:符合游戏规则下,将N个盘子从source移动到target的路径的打印

分析

1~N从A移动到B,C作为辅助
    等价于:
        11~N-1从A移动到C,B为辅助
        2、把N从A移动到B
        31~N-1从C移动到B,A为辅助

我的代码

public class 汉诺塔游戏 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//一开始C是作为辅助的
		printHanoiTower(3,"A","B","C");
	}
	
	/**
	 * 将N个盘子从source移动到target的路径的打印
	 * @param N		初始的N个从小到大的盘子,N是最大编号
	 * @param from	原始柱子
	 * @param help	辅助的柱子
	 * @param to	目标柱子
	 */
	private static void printHanoiTower(int N, String from, String to,String help) {
		if (N == 1) {
			System.out.println("move " + N + " from " + from + " to " + to);
		}
		// 必须加上else,否则会有问题
		else {
			// 先把前N-1个盘子移动到辅助空间上去
			printHanoiTower(N - 1, from, help, to);
			//N可以顺利达到target
			System.out.println("move " + N + " from " + from + " to " + to);
			// 让N-1从辅助空间回到源空间上去
			printHanoiTower(N - 1, help, to, from);
		}
	
	}

}

结果打印

move 1 from A to B
move 2 from A to C
move 1 from B to C
move 3 from A to B
move 1 from C to A
move 2 from C to B
move 1 from A to B
发布了60 篇原创文章 · 获赞 4 · 访问量 1287

猜你喜欢

转载自blog.csdn.net/qq_43966129/article/details/104953978