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)