Search code examples
python-3.xrecursiongenerator

recursion in generator


Is there some special behaviors when using recursion in generator?

I can print 0,1,2,3,4 by following code:

def generator_recursion(n):
    if n < 0:
        return
    else:
        generator_recursion(n-1)
        print(n)
    
generator_recursion(4)

But when I change to generator like below code, It only print 4. I don't know why. please help.

def generator_recursion(n):
    if n < 0:
        return
    else:
        generator_recursion(n-1)
        yield n
    
gr = generator_recursion(4)
for k in gr:
   print(k)

Solution

  • You need to yield from the recursion.

    def generator_recursion(n):
        if n < 0:
            return
        else:
            yield from generator_recursion(n-1)
            yield n
        
    gr = generator_recursion(4)
    for k in gr:
        print(k)
    

    This prints:

    0
    1
    2
    3
    4
    
    ​