611
技術社區[雲棲]
尾遞歸的妙處
尾遞歸的妙處
當遞歸調用是整個函數體中最後執行的語句且它的返回值不屬於表達式的一部分時,這個遞歸調用就是尾遞歸。
很多編譯器會利用這種特點自動生成優化的代碼。
看看編譯器為什麼可以做到這點。因為遞歸調用是當前活躍期內最後一條待執行的語句,於是當這個調用返回時棧幀中並沒有其他事情可做,因此也就沒有保存棧幀的必要了。通過覆蓋當前的棧幀而不是在其之上重新添加一個,這樣所使用的棧空間就大大縮減了,這使得實際的運行效率會變得更高。因此,隻要有可能我們就需要將遞歸函數寫成尾遞歸的形式。
最後更新:2017-04-03 08:26:17