cuốn sách gpt4 ai đã làm

Đây có phải là cách nghĩ đúng đắn về đệ quy trong lập trình? (ví dụ)

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 05:37:43 26 4
mua khóa gpt4 Nike

Tôi đang cố gắng tìm hiểu đệ quy là gì trong lập trình và tôi cần ai đó xác nhận rằng tôi hoàn toàn hiểu nó là gì.

Cách tôi đang cố nghĩ về nó là thông qua việc phát hiện va chạm giữa các vật thể.

Giả sử chúng ta có một hàm. Hàm này được gọi khi xác định được xung đột và được gọi cùng với danh sách các đối tượng để xác định đối tượng nào đã va chạm và đối tượng nào đã va chạm. Đầu tiên nó kiểm tra xem đối tượng đầu tiên trong danh sách có va chạm với bất kỳ đối tượng nào khác không. Nếu đúng, hàm này trả về đối tượng va chạm trong danh sách. Nếu sai, hàm sẽ tự gọi chính nó với danh sách rút gọn loại trừ đối tượng đầu tiên, sau đó lặp lại quy trình để xác định xem đó có phải là đối tượng tiếp theo trong danh sách xung đột hay không.

Đây là hàm đệ quy hữu hạn vì nếu không đáp ứng được điều kiện yêu cầu, nó sẽ tự gọi chính nó bằng cách sử dụng danh sách ngày càng ngắn hơn cho đến khi thỏa mãn về mặt suy diễn điều kiện yêu cầu. Điều này trái ngược với hàm đệ quy vô hạn tiềm năng, ví dụ, trong đó danh sách mà nó gọi chính nó không được rút ngắn mà thứ tự của danh sách là ngẫu nhiên.

Vậy... điều này có đúng không? Hay đây chỉ là một ví dụ khác của sự lặp lại?

Cảm ơn!

biên tập: Tôi thật may mắn khi nhận được ba câu trả lời thực sự hay từ @rici, @Evan và @Jack. Tất cả đều mang lại cho tôi những hiểu biết quý giá về công nghệ và thực tiễn từ những góc độ khác nhau. Cảm ơn!

câu trả lời hay nhất

Bất kỳ sự lặp lại nào cũng có thể được biểu diễn đệ quy. (Và sử dụng các cấu trúc dữ liệu phụ trợ thì ngược lại, nhưng không dễ dàng như vậy.)

Tôi sẽ nói bạn lànghĩ Lặp lại. Đó không phải là điều xấu; tôi không có ý chỉ trích. Nói một cách đơn giản, lời giải thích của bạn có dạng "làm cái này, sau đó làm cái kia và tiếp tục cho đến hết".

Đệ quy là một cách suy nghĩ hơi khác. Tôi đang gặp phải một số vấn đề và tôi chưa biết cách khắc phục chúng. Nhưng tôi nhận thấy rằng nếu tôi biết câu trả lời cho một câu hỏi đơn giản hơn, tôi có thể dễ dàng giải quyết được vấn đề trước mắt. Hơn nữa, có một sốRấtNhững vấn đề đơn giản tôi có thể giải quyết trực tiếp.

Các giải pháp đệ quy dựa trên việc sử dụng các vấn đề đơn giản hơn (nhỏ hơn, ít hơn, bất kỳ thứ gì) để giải quyết vấn đề trước mắt. Làm thế nào để tìm ra cặp đối tượng nào trong một tập hợp đối tượng va chạm nhau?

  1. Nếu có ít hơn 2 phần tử trong tập hợp thì không có cặp nào. Đây là vấn đề đơn giản nhất và nó có lời giải rõ ràng: tập hợp trống.

  2. Ngược lại, tôi chọn một số đối tượng. Tất cả các cặp va chạm đều chứa đối tượng này hoặc không chứa đối tượng này. Vì vậy, điều này mang lại cho tôi hai vấn đề phụ.

  3. Một tập va chạm không liên quan đến đối tượng đã chọn rõ ràng là cùng một vấn đề mà tôi gặp phải lúc đầu, nhưng với một tập va chạm nhỏ hơn. Vì vậy tôi đã thay thế phần này của vấn đề bằng một phần nhỏ hơn. Đây là một sự đệ quy.

  4. Nhưng tôi cũng cần tập hợp các đối tượng mà đối tượng được chọn va chạm (có thể là tập hợp trống). Đây là một vấn đề đơn giản hơn vì bây giờ một phần tử trong mỗi cặp đã được biết. Tôi cũng có thể giải quyết vấn đề này một cách đệ quy:

    • Tôi cần một bộ sưu tập theo cặp chứa một đối tượng X và một tập hợp các đối tượng S.

      1. Nếu tập trống thì không có cặp nào. Đơn giản.

      2. Nếu không, tôi chọn một số thành phần từ bộ sưu tập. Sau đó, tôi tìm thấy tất cả xung đột giữa X và phần còn lại của tập hợp (một vấn đề đơn giản hơn nhưng giống hệt nhau).

      3. Nếu có xung đột giữa X và phần tử được chọn, tôi sẽ thêm nó vào tập hợp tôi vừa tìm thấy.

      4. Sau đó tôi trả lại bộ đồ.

Về thuật toán - đây có phải là cách nghĩ đúng đắn về đệ quy trong lập trình? (Ví dụ), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/30381847/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress