參考連結 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作為中轉
}
}