漢諾塔之前一直是知道過程,理解不了代碼。直到今天在知乎上看到一種理解方式,一下子就懂了。
如何理解漢諾塔的遞歸? - 郭風林的回答 - 知乎
https://www.zhihu.com/question/24385418/answer/128213752
作者:郭風林
鏈接:https://www.zhihu.com/question/24385418/answer/128213752
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
漢諾塔永遠只有三步:
image
image
image
image
image
image
image
image
image
image
圖中是最常見的五層(五珠)漢諾塔,
其實幾層都是一樣,這里設為n,
冰箱門永遠是漢諾塔上面的m=n-1層。
那么問題來了,怎樣把冰箱門打開?
即:怎樣把圖中的1至4號串珠從A柱移動到B柱?
(三根柱子從左至右依次為A、B、C,五顆串珠從小到大依次為1到5)
這又變成了一道m層漢諾塔的問題(m=n-1)。
你可以繼續用把大象裝冰箱分幾步的思路
去考慮m層漢諾塔的解法。
推導下去最終就得到了一個兩層漢諾塔該怎么移動的問題,
這個相信你閉著眼也知道該怎么搞了。
image.png
這個遞歸代碼里面, if disk == 1就是最后只剩一個盤子,直接移動到dest. 然后我們打開冰箱門,也就是把上面四個盤子當作門,一起移動到spare柱;然后我們把大象放進去,也就是把最大的盤子直接放到dest; 最后關上冰箱門,也就是把四個盤子從spare移動到dest. 則完成整個過程。