今天写一个汉诺塔的代码,用老师的参数名,代码规范。。
记得高中数学学数列时候学到这个移动次数,数据结构栈那块递归举例就是用汉诺塔,用递归很容易实现,代码也比较简单,
package datastructures.tree;
/**
* ClassName: Hanoi
* Package: datastructures.tree
* Description:
*
* @Author: luv_x_c
* @Create: 2023/5/16 17:24
*/
public class Hanoi {
/**
* Move a number of plates.
*
* @param paraSource The source pole.
* @param paraIntermediary The intermediary pole.
* @param paraDestination The destination pole.
* @param paraNumber The number of the plates.
*/
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', 4);
}// Of main
}// Of class Hanoi
大概就是,假如有三个盘子,先把上面俩移动到中转的pole,也就是intermediary,然后把最下面的移动到目的pole,然后接下来就剩下俩盘子,以此类推,这俩盘子,先把上面的移动到中转杆,也就是一开始的sourcepole,然后第二个就可以到destination,剩下一个盘子,直接就可以移动。
移动次数应该是2^k-1,k是几个盘子(?没记错的话),代码确实和递归遍历二×树有点像