終於出現值得講的作業了呢!這次的要求是不以遞迴的方式實現河內塔
以迴圈實作遞迴
遞迴模擬器
沒錯,你的電腦其實是用類似迴圈的想法在執行階段實作遞迴的 ( 更正確而言是以循序執行的方式搭配資料結構實現遞迴的 ) ,所以你也可以實作一樣的資料結構,變可以以循序執行的方法實現遞迴了!
那個傳說中的資料結構就是 “Stack”,大概就是….
這麼簡單 ( X
具體而言就是:
- 當函數被呼叫時,所有的參數與區域變數都會存進 Stack 裡面
- 函數開始執行… 此時如果又發生了函數呼叫 ( 不論被呼叫的是自己還是別人 ) ,區域變數繼續往 Stack 上面疊
- 當函數結束時,會將剛剛存進來的參數與區域變數都 Pop 掉
也就是說,只要用陣列實作一個 Stack 就好了!
實作細節相信動動腦很快就有答案了,就不綴述了 ,留給讀者自行思考 : )
而將 Stack 套在遞迴上,事實上因為實作上的方便,你可以先把當前這層的所有遞迴呼叫反向存入 Stack 中,然後以迴圈循序 Pop 出來,順序應該就不會出錯了!
觀察規律法
強者我高中同學觀察出河內塔盤子移動時的規律,進而用數學函數模擬河內塔移動的規律,這個實現方法不需要資料結構就可以完成,算是相當平易近人 ( ?
不過聽說他歸納了一個禮拜,希望大家都可以再時限內繳交作業喔 OwO
小結
這應該算是相當值得思考的題目,相信接下來的作業會愈來愈有趣的 XD
同時感謝維基百科提供圖片OwO