Tôi đang xem qua ghi chú xuất sắc của Kyle Miller. “Đệ quy cuộc gọi đuôi trong Python” và quyết định thử nghiệm các biến thể của kỹ thuật
Ý tưởng là. người ta có thể muốn loại bỏ việc sử dụng ngăn xếp lệnh gọi ngôn ngữ
maximum recursion depth exceeded in comparison3 trong trường hợp "gọi đuôi" [một lệnh gọi hàm mà kết quả không được sử dụng bởi hàm gọi mà thay vào đó được trả về ngay lập tức]. Loại bỏ cuộc gọi đuôi có thể vừa tăng tốc chương trình vừa cắt giảm chi phí duy trì khung ngăn xếp trung gian và môi trường sẽ không bao giờ được sử dụng lại
Ghi chú chỉ ra một cách chính xác rằng
maximum recursion depth exceeded in comparison3 cố tình không có câu lệnh
maximum recursion depth exceeded in comparison5, một công cụ mà người ta có thể sử dụng để thực hiện loại bỏ cuộc gọi đuôi thực. Vì vậy, Kyle Miller đã xây dựng một sự thay thế dựa trên cấu trúc dữ liệu cho ngăn xếp cuộc gọi, cho phép một người làm việc xung quanh giới hạn ngăn xếp cho một chức năng cụ thể [không thay đổi bất kỳ cấu hình
maximum recursion depth exceeded in comparison3 nào và không thay đổi hành vi của các chức năng khác]
Tất nhiên,
maximum recursion depth exceeded in comparison3 có một số điều khiển luồng điều khiển kỳ lạ.
maximum recursion depth exceeded in comparison1 và
maximum recursion depth exceeded in comparison2. Vì vậy, tôi quyết định xây dựng một giải pháp dựa trên
maximum recursion depth exceeded in comparison3 của riêng chúng tôi bằng cách sử dụng
maximum recursion depth exceeded in comparison1
Vui lòng đọc tiếp để biết cách chúng tôi thực hiện việc này và một số ví dụ
Hãy xem một ví dụ về vấn đề. Lưu ý chức năng tự gọi [ngớ ngẩn] không thành công vì nó chạy hết ngăn xếp cuộc gọi trước khi hoàn thành phép tính của nó
Trong 1]
def recursive_example[n, d=1]: if n