Có cách nào để kết hợp đệ quy và tuyên bố yield
không? Ví dụ, một máy phát điện số vô hạn (sử dụng đệ quy) sẽ là một cái gì đó như:Đệ quy sử dụng năng suất
def infinity(start):
yield start
# recursion here ...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2
tôi đã cố gắng:
def infinity(start):
yield start
infinity(start + 1)
và
def infinity(start):
yield start
yield infinity(start + 1)
Nhưng không ai trong số họ đã làm những gì tôi muốn, người đầu tiên dừng lại sau khi nó mang lại start
và cái thứ hai mang lại start
, sau đó máy phát điện và sau đó dừng lại.
LƯU Ý: Xin vui lòng, tôi biết bạn có thể làm điều này bằng cách sử dụng vòng lặp while:
def infinity(start):
while True:
yield start
start += 1
Tôi chỉ muốn biết nếu điều này có thể được thực hiện một cách đệ quy.
Xem [ở đây] [1] để có câu trả lời hay cho câu hỏi này tôi đã đặt ra một lúc trước. [1]: http://stackoverflow.com/questions/5704220/python-generator-vs-callback-function – sizzzzlerz
Lưu ý: cách thích hợp để làm điều này sẽ được sử dụng [ 'itertools.count' ] (http://docs.python.org/dev/library/itertools.html#itertools.count) thay vì cuộn giải pháp của riêng bạn, dựa trên vòng lặp hoặc các cách khác. –
@PetrViktorin đây chỉ là một ví dụ, tạo ra số vô hạn không phải là ở tất cả các vấn đề thực sự – juliomalegria