毒L紀 程設一[4] HW4心得 - 遞迴模擬器

終於出現值得講的作業了呢!這次的要求是不以遞迴的方式實現河內塔

以迴圈實作遞迴

遞迴模擬器

沒錯,你的電腦其實是用類似迴圈的想法在執行階段實作遞迴的 ( 更正確而言是以循序執行的方式搭配資料結構實現遞迴的 ) ,所以你也可以實作一樣的資料結構,變可以以循序執行的方法實現遞迴了!

那個傳說中的資料結構就是 “Stack”,大概就是….

FIFO示意圖

這麼簡單 ( X

具體而言就是:

  • 當函數被呼叫時,所有的參數與區域變數都會存進 Stack 裡面
  • 函數開始執行… 此時如果又發生了函數呼叫 ( 不論被呼叫的是自己還是別人 ) ,區域變數繼續往 Stack 上面疊
  • 當函數結束時,會將剛剛存進來的參數與區域變數都 Pop 掉

也就是說,只要用陣列實作一個 Stack 就好了!

實作細節相信動動腦很快就有答案了,就不綴述了 ,留給讀者自行思考 : )

而將 Stack 套在遞迴上,事實上因為實作上的方便,你可以先把當前這層的所有遞迴呼叫反向存入 Stack 中,然後以迴圈循序 Pop 出來,順序應該就不會出錯了!

觀察規律法

強者我高中同學觀察出河內塔盤子移動時的規律,進而用數學函數模擬河內塔移動的規律,這個實現方法不需要資料結構就可以完成,算是相當平易近人 ( ?

不過聽說他歸納了一個禮拜,希望大家都可以再時限內繳交作業喔 OwO

小結

這應該算是相當值得思考的題目,相信接下來的作業會愈來愈有趣的 XD

同時感謝維基百科提供圖片OwO