python中簡單的遞歸類似於這樣:
def countdown(n): if n > 0: print(n) countdown(n-1) countdown(10)
但是如果把print改為yield后就出現問題了
def countdown(n): if n > 0: yield n countdown(n-1) t = countdown(10) for x in t: print(x)
只能輸出第一個元素,yield后面的遞歸調用根本運行不了,因為它只是一生成器,既沒有運行也沒有輸出。
解決辦法是把遞歸調用改為循環遍歷,代碼如下:
def countdown(n): if n > 0: yield n for i in countdown(n-1): yield i t = countdown(10) for x in t: print(x)