2011-02-09 61 views
5

Đệ 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

3

Đợ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ể.

10

Đệ 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.