erlang中的尾遞歸比前向遞歸更適合性能?
或者erlang編譯器也優化了前向遞歸嗎?
我的意思是,是否有任何理由使用尾遞歸而不是前向遞歸?
在我看來,前向遞歸看起來更漂亮。Erlang中的尾遞歸與前向遞歸
5
A
回答
3
尾遞歸通常更好,因爲它使用較少的內存。您只需將下一次調用所需的內容帶到堆棧上,從而最大限度地減少堆棧上的內存使用率。此外,當尾遞歸代碼被優化時,不需要的函數返回被丟棄,這在某些情況下會稍微快一些。
例如,如果函數的返回值是對另一個函數的調用,則不需要將中間函數保留在堆棧上。所以代碼直接從內部函數跳回到調用者。
非尾遞歸優化爲在某些情況下由Erlang編譯器遞歸遞歸,但不要指望它。儘可能編寫尾遞歸函數是一個好習慣。
10
尾遞歸和正向遞歸是完全不同的概念。 看到這個discussion。
可以編寫一個尾遞歸的前向遞歸,從而進行優化。也可以寫一個不是尾遞歸的前向遞歸:在這種情況下,它不會被優化,即它將消耗堆棧空間。
相關問題
- 1. 尾遞歸與前向遞歸
- 2. 遞歸與VS.尾遞歸
- 3. 尾遞歸與List.fold_left
- 4. 尾遞歸?
- 5. Javascript尾遞歸
- 6. Erlang瞭解遞歸
- 7. 尾遞歸算法歸併
- 8. 交集與尾遞歸
- 9. 尾遞歸函數與否
- 10. 尾遞歸vs頭經典遞歸
- 11. 遞歸過程到尾遞歸過程
- 12. 尾遞歸vs原始遞歸
- 13. 遞歸,尾遞歸和迭代
- 14. 如何在非尾遞歸中轉換尾遞歸
- 15. 遞歸與非遞歸
- 16. java.lang.StackOverflowError的Clojure中尾遞歸
- 17. java中的尾遞歸
- 18. clojure中的尾遞歸
- 19. Scala中的尾遞歸findNextAndTail
- 20. R中的尾遞歸
- 21. C中的尾遞歸?
- 22. Bash中的尾遞歸
- 23. 彙編中的尾遞歸
- 24. 方案尾遞歸
- 25. 尾遞歸函數
- 26. 計劃。尾遞歸?
- 27. 尾v頭遞歸
- 28. 尾遞歸組合
- 29. 尾遞歸連續
- 30. 尾遞歸和CPS