回答

5

完全擁有堆棧編譯器在支持遞歸時必須具備的特殊處理。

在較早的FORTRAN版本的編程語言中,運行時環境沒有函數堆棧,每個函數只有一個激活記錄保留在內存中某處。這意味着遞歸併非完全可能,因爲如果遞歸調用某個函數,則會覆蓋其唯一的激活記錄,從而失去了如何到達的上下文跟蹤。

函數堆棧的引入是首先使得遞歸實際上以編程語言表達的。在此之前,程序員會使用遞歸作爲抽象解決問題的工具,但由於缺少調用堆棧,必須將該代碼翻譯爲迭代邏輯。

爲了使編程語言支持遞歸,它需要有一些動態維護調用堆棧的機制。這不必通過明確的堆棧;你理論上可以動態分配所有的堆棧幀,並將它們鏈接在一起作爲鏈表。例如,如果您想要支持協程或閉包,並且在函數返回後實際需要保留舊的激活記錄,以便稍後可以存儲數據,則這會很有用。

希望這會有所幫助!

+0

這有很大的幫助。謝謝! – Halaby