Khi lập trình bằng Java (hoặc bất kỳ ngôn ngữ thủ tục nào khác cho vấn đề đó), tôi thường chọn giữa giải quyết một cách đệ quy và giải quyết nó lặp đi lặp lại. Tùy chọn đệ quy thường thanh lịch hơn so với giải pháp lặp nên tôi thường tìm giải pháp đệ quy. Với một ngoại lệ:Ok để có độ sâu ngăn xếp tuyến tính tỷ lệ thuận với một số kích thước đầu vào?
Lo lắng về tràn ngăn xếp Tôi có xu hướng tránh các giải pháp đệ quy nếu độ sâu ngăn xếp tối đa tỷ lệ thuận với kích thước đầu vào (hoặc tệ hơn). Tuy nhiên, tôi nhận ra rằng trong nhiều ngôn ngữ khác (ngay cả những ngôn ngữ nhắm vào JVM như Scala và Clojure) nhiều thuật toán, chẳng hạn như các thuật toán danh sách cơ bản, thường được biểu diễn một cách đệ quy nơi độ sâu stack tối đa tỉ lệ với độ dài của danh sách. (1) Vì vậy, là những lo lắng của tôi về việc tràn ngăn xếp trong các thuật toán xếp chồng-chiều sâu-tuyến tính hợp lý?
TL; DR: "Độ phức tạp chiều sâu ngăn xếp" được coi là hợp lý? Logarit phức tạp, tìm kiếm nhị phân đệ quy Ví dụ, O (log N) chắc chắn là ok, nhưng làm thế nào về O (N), O (N log N), O (N)? Bạn thường vẽ đường ở đâu? (2)
(1) Tôi nhận ra rằng ngôn ngữ như vậy đôi khi hỗ trợ những thứ như @tailrec, nhưng câu hỏi này liên quan đến Java, C#, vv
(2) Lưu ý rằng tôi không quan tâm đến CPU overhead vv Chỉ cần chiều sâu ngăn xếp.
Độ phức tạp của độ sâu ngăn xếp là một điều cần xem xét, nhưng một điều khác là kích thước đầu vào chính nó. Nếu vấn đề không bao gồm đầu vào lớn của miền của nó (trong khoảng thời gian kéo dài trong quá trình phát triển), thì chúng ta có thể đi cho giải pháp đệ quy (với giả định độ phức tạp không vượt quá dung lượng của chồng). Nếu kích thước đầu vào không được xác định, độ sâu ngăn xếp O (1) hoặc O (log N) là IMO chấp nhận được (O (log N) có thể không chấp nhận được nếu giới hạn trên ** thực ** trên kích thước đầu vào thậm chí bị hỏng kích thước ngăn xếp, nhưng tôi nghĩ trường hợp này sẽ khá hiếm). – nhahtdh
"Tùy chọn đệ quy thường thanh lịch hơn là giải pháp lặp" Trong 90% trường hợp tôi thấy ngược lại. Nó có thể phụ thuộc vào loại vấn đề bạn đang cố gắng giải quyết và kiểu nào bạn cảm thấy thoải mái hơn. ;) Tôi thường cảm thấy thoải mái với độ sâu đệ quy o (log N). –
Đây có phải là [thẻ: ngôn ngữ thuyết bất khả tri] –