使用yield进行递归

13 浏览
0 Comments

使用yield进行递归

有没有办法将递归和yield语句结合起来?例如,一个使用递归的无限数生成器可以是这样的:

def infinity(start):
    yield start
    # 递归在这里...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2

我尝试过:

def infinity(start):
    yield start
    infinity(start + 1)

def infinity(start):
    yield start
    yield infinity(start + 1)

但是它们都没有达到我想要的效果,第一个在生成了start后就停止了,第二个生成了start,然后是生成器,然后停止了。

注意:请注意,我知道可以使用while循环来实现这个:

def infinity(start):
    while True:
        yield start
        start += 1

我只是想知道是否可以通过递归来实现这个。

0