尾呼叫和尾遞迴

2021-09-12 12:12:21 字數 489 閱讀 8086

造成這樣的結果是因為每個函式在呼叫另乙個函式的時候,沒有return該呼叫,所以執行引擎會認為你還沒有呼叫完畢,會保留呼叫幀。

而如果使用尾呼叫優化,呼叫幀就永遠只有一條,這個時候就會節省很大一部分的記憶體空間,維護了**執行的流暢性。

以上**就叫做尾呼叫優化,這個時候呼叫幀就永遠只有一條,節省了部分記憶體。

函式呼叫自身,稱為遞迴。如果尾呼叫自身,就稱為尾遞迴。

遞迴非常耗費記憶體,因為需要同時儲存成千上百個呼叫幀,很容易發生「棧溢位」錯誤(stack overflow)。但對於尾遞迴來說,由於只存在乙個呼叫幀,所以永遠不會發生「棧溢位」錯誤。

尾呼叫 尾遞迴

首先什麼是尾呼叫呢?我的理解是在,函式的最後呼叫乙個函式,並不包含該函式的任何變數。如 def f n return g n 複製 這個就是尾呼叫,尾呼叫的乙個好處就是,不用生成呼叫棧,因為假設是個尾呼叫,那麼當我執行到函式末尾的時候,這個函式相關的資訊我都可以不用保留了,因此不會出現棧溢位的問題。...

關於尾呼叫和尾遞迴

1 尾呼叫 指某個函式的最後一步是呼叫另乙個函式。例如 function a n 最後一步呼叫並不意味著在函式的尾部,只要是最後一步即可 function a n return c n 2 什麼樣的情況不是尾呼叫 情況一 function f x 解釋 呼叫g之後,還有賦值操作,故不屬於尾呼叫。情況...

遞迴尾呼叫

什麼是遞迴尾呼叫 遞迴呼叫放在函式結尾 區別 def fac n if n 0 return 1 else return n fac n 1 def print fa n if n 0 print fa n 1 print n print fa 10 結果 1到10def fac n if n 0 ...