Có chính xác không khi nói rằng mọi nơi đệ quy được sử dụng một vòng lặp for có thể được sử dụng?
Có, bởi vì đệ quy trong hầu hết các CPU được mô hình hóa bằng các vòng lặp và cấu trúc dữ liệu ngăn xếp.
Và nếu đệ quy thường chậm hơn thì lý do kỹ thuật để sử dụng nó là gì?
Nó không phải là "thường chậm hơn": đó là đệ quy được áp dụng không chính xác sẽ chậm hơn. Trên hết, các trình biên dịch hiện đại rất giỏi trong việc chuyển đổi một số đệ quy thành vòng lặp mà không cần hỏi.
Và nếu luôn có thể chuyển đổi một đệ quy thành một vòng lặp for thì có quy tắc ngón tay cái để làm điều đó không?
Viết chương trình lặp cho các thuật toán được hiểu rõ nhất khi được giải thích lặp lại; viết chương trình đệ quy cho các thuật toán được giải thích một cách đệ quy tốt nhất.
Ví dụ, tìm kiếm cây nhị phân, chạy quicksort và phân tích cú pháp biểu thức trong nhiều ngôn ngữ lập trình thường được giải thích một cách đệ quy. Chúng cũng được mã hóa đệ quy tốt nhất. Mặt khác, tính toán thừa số và tính toán số Fibonacci dễ giải thích hơn nhiều về số lần lặp. Sử dụng đệ quy đối với chúng giống như đánh ruồi bằng một chiếc búa tạ: đó không phải là một ý kiến hay, ngay cả khi chiếc búa tạ thực hiện rất tốt + .
+ Tôi mượn phép ví von chiếc búa tạ từ cuốn "Kỷ luật lập trình" của Dijkstra.
recursion
vsiteration
?iteration = for loop
Tôi nghĩ.