天天看點

對漢諾塔java實作的了解記錄

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