Hanoi(漢諾塔)

//先來段代碼
function hanoi(disc,start,end,middle){
    if(disc > 0){
        hanoi(disc-1,start,middle,end);
        console.log('disc: ' + disc + ' from ' + start +' to ' +end);
        hanio(disc-1,middle,end,start);
    }
}
hanoi(3,'A','C','B');
/*
disc: 1 from A to C
disc: 2 from A to B
disc: 1 from C to B
disc: 3 from A to C
disc: 1 from B to A
disc: 2 from B to C
disc: 1 from A to C
*/

注:
①參數:1-4分別爲:原始層疊數量,也就是原始矩形數。原始位置,目標位置,中轉站。

②disc-1的含義:

面積最大的三號矩形(這裏簡稱三大爺),一想:要是誰能幫我把上面2個矩形從A移到B就好,就在這個時候,他想起了自己的小弟(二號矩形,簡稱二爺),就吩咐二爺,來來來,幫我把上面兩個破玩意移到B去,如:圖1

這裏寫圖片描述

二爺一想,要把矩形1和矩形2從A移到B,那我要跑三趟呀(矩形1:A→C,矩形2:A→B,矩形1:C→B)。表示不幹,就叫自己的小弟(一號矩形,真正的小弟)吩咐道:把最上面那玩意給我移到C去。小弟充滿激情得回答到:好勒,如圖②
這裏寫圖片描述

二爺一看,小弟看的不錯,然後自己簡簡單單把二號矩形,從A移到B就完事了,一步搞定,如圖③
這裏寫圖片描述

就過了一會哦,二爺賊兮兮得盯着小弟,“來來來,幹活有始有終嘛,再把那玩意給我移到B去”。“好勒”,小弟答道,如圖④
這裏寫圖片描述

三大爺過來一看,乾的不錯呀,就把三號矩形移到C,對着二爺和小弟說道:把活幹完哈,如圖⑤
這裏寫圖片描述

這時,二爺又笑眯眯地看着小弟,小弟,二話不說,就把矩形1搬到A去了,如圖⑥
這裏寫圖片描述

“不錯不錯”,二爺順手把矩形2從B搬到C,如圖⑦。
這裏寫圖片描述

小弟這次都不用吩咐了,秒懂,如圖⑧
這裏寫圖片描述

回到正題,disc-1是爲了把除了最底下的部分全部委託給他人去做,自己只做一件最重要的事情。由下往上,以此類推。
7=4+2+1=2^-1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章