参考链接 https://blog.csdn.net/zandaoguang/article/details/76889284
参考链接 https://blog.csdn.net/qq_37873310/article/details/80461767
汉诺塔的原理就不多说了,请参考以上两篇文章。
在理解汉诺塔的过程中对以上两篇文章的变量名产生过迷惑,在理解了之后,将函数中的变量名从A,B,C修改为src、tmp、dest貌似稍微清楚了一些,详情参考源码:
public class Hano {
static int m = 0;// 标记移动次数
public static void move(int diskNum, char N, char M) {
System.out.println("第" + (++m) + " 次移动 : " + " 把 " + diskNum + " 号圆盘从 " + N + " ->移到-> " + M);
}
// n为圆盘编号,src为源柱子,tmp为中转用的柱子,dest为目的柱子
public static void hano(int n, char src, char tmp, char dest) {
if (n == 1) //最上层圆盘直接从 src移动到dest
move(1, src, dest);
else {
hano(n - 1, src, dest, tmp); //将n-1号及以上的圆盘从src移动到tmp,dest做中转
move(n, src, dest);//将n号圆盘从src移动到dest
hano(n - 1, tmp, src, dest);//将n-1号及以上的圆盘从tmp移动到dest,src做中转
}
}
public static void main(String[] args) {
char A = 'A';
char B = 'B';
char C = 'C';
hano(3, A, B, C);//起始目标,将小于等于3号的圆盘,从A移动到C,B作为中转
}
}