日撸代码300行学习笔记 Day 27

1.Hanoi塔问题

关于这个hanoi塔的问题,引荐这篇文章Hanoi塔问题分析,在此之前我也是没有听说过这玩意,第一次接触,单论执行方法来说,好像挺简单的,但是将其转换为代码来做的时候,逻辑思考就需要想的比较深。

2.代码

这个代码非常短啊, 但是很打脑壳啊,执行这个代码的时候,一定要盯着这张图,才不至于在递归里面迷路。

这玩意有个规则啊,每次挪动过后,不能大的盘子在小的盘子上面啊,要不然直接全部进B,然后再全部倒着进C就完成了。最开始没注意到这一点,造成了一些疑惑。

因为下面代码是用的3个柱子,3个盘子的例子来讲解,而这张图正好能重述整个过程

package tree;

public class Hanoi {
	/**
	 *********************
	 * Move a number of plates.
	 * 
	 * @param paraSource      The source pole 第一根杆子
	 * @param paraIntermedium The intermediary pole 第二根杆子
	 * @param paraDestination The destination pole 第三根杆子
	 * @param paraNumber      盘子数量.
	 *********************
	 */
	public static void hanoi(char paraSource, char paraIntermediary, char paraDestination, int paraNumber) {
		if (paraNumber == 1) {
			System.out.println(paraSource + "->" + paraDestination + " ");
			return;
		} // Of if

		hanoi(paraSource, paraDestination, paraIntermediary, paraNumber - 1);
		System.out.println(paraSource + "->" + paraDestination + " ");
		hanoi(paraIntermediary, paraSource, paraDestination, paraNumber - 1);
	}// Of hanoi

	/**
	 *********************
	 * The entrance of the program.
	 * 
	 * @param args Not used now.
	 *********************
	 */
	public static void main(String args[]) {
		hanoi('a', 'b', 'c', 3);
	}// Of main
}// Of class Hanoi

3.总结

在老师写这一段的时候,感觉其更像是二叉树,为什么会感觉这个像二叉树喃?没有理解到其中的意思,这不很像一个栈吗 = =??卧槽,最开始理解错了,在这段代码中,a,b,c三个杆子,例如a->b的意思是,从a这根杆最上面拿一个盘子到b这里面去,并且要保证上下大小不能出错。这一点是通过什么保证的?根据判断条件是盘子数量?没有搞明白这个递归控制的原理,今天做的时间太短了,没有想明白这个原理,后面得空了再回来想

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值