什麼是遞迴
函式在處理過程中呼叫自己。把問題分成形式相同的較小問題來解,並在不再分割的情況(基底情況)結束呼叫。每次呼叫都會使用堆疊,太深就會溢位。最後只呼叫自己的尾端遞迴可以轉換成迴圈。
日文名稱: 再帰
「遞迴」出現在8領域的14道練習題中(資料結構與演算法, 連結器與載入器與執行檔格式, 程式設計基礎(虛擬碼追蹤)等)。
這個名詞所屬的領域: 資料結構與演算法
函式在處理過程中呼叫自己。把問題分成形式相同的較小問題來解,並在不再分割的情況(基底情況)結束呼叫。每次呼叫都會使用堆疊,太深就會溢位。最後只呼叫自己的尾端遞迴可以轉換成迴圈。
日文名稱: 再帰
「遞迴」出現在8領域的14道練習題中(資料結構與演算法, 連結器與載入器與執行檔格式, 程式設計基礎(虛擬碼追蹤)等)。
這個名詞所屬的領域: 資料結構與演算法
遞迴呼叫的jal會將ra覆寫為「自己內部呼叫的下一個指令」。
在RISC-V中撰寫呼叫自己的遞迴函式時,若忘了將ra保存到堆疊,會發生什麼事?這個函式的遞迴呼叫是函式的最後一項處理,並且直接回傳其結果(尾端呼叫)。
對上方函式最後的遞迴呼叫進行尾端呼叫最佳化,會有什麼效果?當遞迴過深使堆疊到達這裡時,就會發生分頁錯誤(page fault),由作業系統停止程式(區段錯誤)。
當遞迴過深而超過堆疊的上限時,在Linux等系統上一般會發生的事,下列何者正確?堆疊是後放入的先取出(LIFO)的結構,即使呼叫形成巢狀或遞迴,也能依正確的順序返回。
在程式中呼叫副程式(函式)時,一般用來暫時保存返回位址等的區域是下列何者?因此即使遞迴使得同一個函式被多層呼叫,每一層也都能擁有各自獨立的變數。
在C語言的函式中宣告、未加static的區域變數(自動變數),執行時會放在哪裡?