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这里面去,并且要保证上下大小不能出错。这一点是通过什么保证的?根据判断条件是盘子数量?没有搞明白这个递归控制的原理,今天做的时间太短了,没有想明白这个原理,后面得空了再回来想