汉诺塔递归分析:Java版

图1-1  汉诺塔

1、汉诺塔游戏规则:

借助B杆把A杆的珠子移动到C杆,而不改变珠子的上下顺序,最少移动多少次?
(1) 每次只能移动1个珠子;
(2) 大珠子不能放在小珠子上面;

2、算法过程解析:

图1-2  

步骤:

(1)若果A杆上一个珠子,直接将A杆的柱子移动到C,游戏结束;

(2)否则的话,假如是三个珠子。

      把上面n-1个珠子从A借助B搬到C;

      再把B上面n-1个珠子借助A搬到C;如图1-2

3、代码示例;

	/**
	 * 
	 * @param n
	 *            a柱子上的盘片数量;
	 * @param a
	 *            柱子
	 * @param b
	 *            柱子
	 * @param c
	 *            柱子
	 *            //这里代表将a柱子上的盘子借助b柱子移动到c柱子
	 * 
	 */
	public static void Hanio(int n, String a, String b, String c) {
		if (n == 1) {
			System.out.println("移动" + n + "号盘片从" + a + "到" + c);
		} else {
			// 把上面n-1个盘片从a借助b搬到c;
			Hanio(n - 1, a, c, b);
			System.out.println("移动" + n + "号盘子从" + a + "到" + c);
			Hanio(n - 1, b, a, c);// 再把b上的n-1个盘子借助a搬到c;
		}
	}

猜你喜欢

转载自blog.csdn.net/weixin_41817688/article/details/87192663