¿Hay alguna forma de mezclar recursividad y la instrucción yield
? Por ejemplo, un generador de números infinitos (utilizando la recursividad) sería algo así como:Recursividad con rendimiento
def infinity(start):
yield start
# recursion here ...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2
Traté:
def infinity(start):
yield start
infinity(start + 1)
y
def infinity(start):
yield start
yield infinity(start + 1)
Pero ninguno de ellos hizo lo que quiero, el primero se detuvo después de que cedió start
y el segundo rindió start
, luego el generador y luego se detuvo.
NOTA: Por favor, sé que puedes hacerlo usando un bucle while:
def infinity(start):
while True:
yield start
start += 1
sólo quiero saber si esto se puede hacer de forma recursiva.
Ver [aquí] [1] para una buena respuesta a esta pregunta que hice hace un tiempo. [1]: http://stackoverflow.com/questions/5704220/python-generator-vs-callback-function – sizzzzlerz
Nota: la forma correcta de hacer esto sería utilizar [ 'itertools.count' ] (http://docs.python.org/dev/library/itertools.html#itertools.count) en lugar de implementar su propia solución, basada en bucles o de otra manera. –
@PetrViktorin esto es solo un ejemplo, generar números infinitos no es en absoluto el problema real – juliomalegria