Có thể đệ quy đuôi trong Python không?

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 comparison
3 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 comparison
3 cố tình không có câu lệnh
maximum recursion depth exceeded in comparison
5, 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 comparison
3 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 comparison
3 có một số điều khiển luồng điều khiển kỳ lạ.
maximum recursion depth exceeded in comparison
1 và
maximum recursion depth exceeded in comparison
2. 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 comparison
3 của riêng chúng tôi bằng cách sử dụng
maximum recursion depth exceeded in comparison
1

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 

Chủ Đề