Đệ quy đệ quy có tốt hơn so với đệ quy về phía trước cho sự hoàn hảo trong erlang?
Hoặc trình biên dịch erlang tối ưu hóa đệ quy về phía trước?
Ý tôi là, có lý do nào để sử dụng đệ quy đuôi thay vì đệ quy về phía trước không?
Theo tôi, chuyển tiếp đệ quy trông đẹp hơn.Đệ quy đệ quy và đệ quy đệ quy trong Erlang
Trả lời
Đợt đệ quy thường tốt hơn vì nó sử dụng ít bộ nhớ hơn. Bạn chỉ mang những gì bạn cần vào cuộc gọi tiếp theo, giúp giảm thiểu việc sử dụng bộ nhớ trên ngăn xếp. Ngoài ra, khi mã đệ quy đuôi được tối ưu hóa, các hàm trả về không cần thiết sẽ bị vứt bỏ sẽ làm cho nó nhanh hơn một chút trong một số trường hợp.
Ví dụ, nếu giá trị trả về của hàm là cuộc gọi đến hàm khác, không cần giữ hàm trung gian trên ngăn xếp. Vì vậy, mã nhảy trở lại trực tiếp đến người gọi từ hàm bên trong.
Đệ quy không đuôi được tối ưu hóa để đệ quy đuôi trong một số trường hợp bằng trình biên dịch Erlang, nhưng không tính vào nó. Làm cho nó trở thành một thói quen tốt để mã các hàm đệ quy đuôi bất cứ khi nào bạn có thể.
Đệ quy đệ quy và chuyển tiếp đệ quy là các khái niệm hoàn toàn khác nhau. Xem số discussion này.
Có thể viết đệ quy về phía trước có đuôi đệ quy và do đó được tối ưu hóa. Nó cũng có thể viết một đệ quy về phía trước mà không phải là đệ quy đuôi: trong trường hợp này, nó sẽ không được tối ưu hóa, tức là nó sẽ tiêu thụ không gian ngăn xếp.
- 1. Đệ quy đệ quy so với đệ quy trước
- 2. staticmethod và đệ quy?
- 3. Ngăn chặn việc thực thi đệ quy đệ quy?
- 4. Giao tiếp đệ quy đệ quy giữa các đa giác
- 5. Làm đệ quy đệ quy bộ nhớ rò rỉ?
- 6. Chuyển đổi thành vòng lặp ... đệ quy đệ quy
- 7. Đệ quy trong MIPS
- 8. gõ module đệ quy
- 9. Block_copy đệ quy?
- 10. Memoization với đệ quy
- 11. đệ quy cơ bản
- 12. Chèn đệ quy BST
- 13. getWritableDatabase gọi đệ quy
- 14. Loại chung đệ quy
- 15. SQL đệ quy
- 16. Đệ quy với Func
- 17. Xóa đệ quy SVN
- 18. Hàm đệ quy JQuery?
- 19. ruby đệ quy regex
- 20. PostgreSQL đệ quy với
- 21. SQL đệ quy query
- 22. java.lang.StackOverflowError do đệ quy
- 23. Sed thay đệ quy
- 24. BOOST: đệ quy shared_mutex?
- 25. Không đệ quy os.walk()
- 26. Grep đệ quy và Đếm
- 27. KnockoutJS và Mẫu đệ quy
- 28. Đệ quy và Big O
- 29. Thường quy đệ quy để lấy PropertyInfo
- 30. đuôi đệ quy trong OCaml