今天在看python的課程時 聽到老師講到了遞迴
實際上 在我大學學程式設計課的時候
就聽到老師們說過 遞迴不是一種很好定義函式邏輯的方式
這是因為在遞迴過程中 程式為了儲存函式現場的變數需要使用大量的記憶體資源
尤其是當遞迴的層數變多時 就會占用大量的記憶體
於是 使用迴圈方式來解決遞迴問題是一種十分可取的方法
其實關於遞迴的程式設計思路實際上是一種回溯的過程
以階乘運算為例 如果使用遞迴方法來解題的話
其思路是: n! = n * (n-1)!
其實其基本思想就是採用了「回溯」的方式
如果利用迴圈來解題的話 實際上就是追本溯源
由基例資料開始進行累積計算 類似於「道生一,一生二,二生三,三生萬物」這種由源頭開始的思想
規範化的遞迴轉換成非遞迴
遞迴函式被呼叫時,系統需要乙個執行棧。系統的執行棧要儲存函式的返回位址,儲存呼叫函式的區域性變數,每一層遞迴呼叫所需儲存的資訊構成執行棧的乙個工作記錄,在沒進入下一層遞迴呼叫是,系統就會建立乙個新的工作記錄,並把這個工作記錄進棧成為執行棧新的棧頂,每返回一層遞迴呼叫,就退棧乙個工作記錄,因棧頂的工作...
資料結構 用棧來將遞迴轉換成迴圈
為什麼將遞迴轉換成迴圈需要用到棧?遞迴其實是在每次呼叫自己來進入新的狀態,直到最後一次的狀態能夠滿足遞迴的結束條件,然後返回到上次的狀態。我們都知道棧有著後進先出的特性,那這樣是不是就可以理解為遞迴每呼叫一層就壓入棧,直到最後滿足遞迴結束條件,再一層層彈出棧,那麼用棧來將遞迴改為迴圈,就可以理解了。...
多為陣列轉換成一維 遞迴
靜態變數是只存在於函式作用域中的變數,注釋 執行後這種變數不會丟失 下次呼叫這個函式時,變數仍會記著原來的值 function array multi2single array else result array value return result array array array 1 arr...