Is there any way to mix recursion and the `yield`

statement? For instance, a infinite number generator (using recursion) would be something like:

```
def infinity(start):
yield start
# recursion here ...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2
```

I tried:

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

and

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

But none of them did what I want, the first one stopped after it yielded `start`

and the second one yielded `start`

, then the generator and then stopped.

**NOTE:** Please, I know you can do this using a while-loop:

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

I just want to know if this can be done recursively.

## Best Solution

Yes, you can do this:

This will error out once the maximum recursion depth is reached, though.

Starting from Python 3.3, you'll be able to use

If you just call your generator function recursively without looping over it or

`yield from`

-ing it, all you do is build a new generator, without actually running the function body or yielding anything.See PEP 380 for further details.