Đệ quy - như tất cả chúng ta đều biết - là một trong những vấn đề đó - việc quấn lấy đầu bạn có cảm giác như đạt được một "cột mốc" trong hành trình lập trình của bạn.
Nhưng khi thực sự sử dụng nó trong các vấn đề trong thế giới thực - biết cơ chế đệ quy là chưa đủ - người ta cũng phải hiểu bản chất của các vấn đề trong đó đệ quy là giải pháp phù hợp nhất.
Vì vậy, câu hỏi của tôi là ...
- "các mẫu vấn đề" yêu cầu giải pháp đệ quy là gì
- là đệ quy một hình thức chiến lược "phân chia & chinh phục" hoặc một hình thức "tái sử dụng mã" - hoặc, là một mẫu thiết kế theo đúng nghĩa của nó
- bạn có thể cho chúng tôi một ví dụ về một vấn đề trong thế giới thực, nơi đệ quy xuất hiện trong tâm trí như một giải pháp tức thời
- CẬP NHẬT -
rất nhiều câu trả lời đang đề cập đến "các vấn đề thực tế" khi đi ngang qua cây, của giai thừa, v.v. Tôi thích "các vấn đề thực tế THỰC SỰ" - hãy để tôi cho bạn một ví dụ ...
Chúng tôi đã có một đoạn văn bản LỚN (khoảng 30 MB văn bản dưới dạng danh sách được liên kết structs
) và chúng tôi cần tạo một chỉ mục của nó để tìm kiếm toàn văn bản. Chúng tôi cần giữ toàn bộ chỉ mục trong bộ nhớ và lập chỉ mục lại văn bản cứ sau 10 phút.
Cứ sau 10 phút, chúng tôi sẽ so sánh toàn bộ văn bản (hai danh sách được liên kết, từng dòng) với một đoạn văn bản mới được tạo - để xem dòng nào đã được thay đổi - và sau đó chúng tôi sẽ chỉ lập lại dòng đó - theo cách đó chúng ta có thể tránh phải lập chỉ mục lại văn bản ENTIRE. Hãy nhớ rằng - chúng tôi cần tìm các điểm khác nhau giữa hai danh sách được liên kết 30 MB.
Một trong những đồng nghiệp của tôi đã đưa ra một chương trình tuyệt vời sử dụng đệ quy HEAVY để so sánh các dòng - và sau đó thu thập các vị trí mà các con gà khác nhau trong một mảng - vâng tôi biết nó nghe có vẻ khó hiểu - làm thế nào có thể đệ quy ở đây - nhưng nó đã làm.
Vấn đề là - làm thế nào anh ta có thể thấy rằng vấn đề này có thể được giải quyết một cách thông minh với việc sử dụng đệ quy nặng?