Aquí hay una implementación que no usa recursividad, y solo memoriza los dos últimos valores en lugar de todo el historial de la secuencia.
nthfib() a continuación es la solución directa al problema original (siempre y cuando se permiten las importaciones)
es menos elegante que el uso de los métodos reducen el anterior, pero, aunque ligeramente diferente que lo que se solicitó, se gana la habilidad de ser usado de manera más eficiente como un generador infinito si también se necesita generar la secuencia hasta el enésimo número (reescribiendo ligeramente como fibgen() a continuación).
from itertools import imap, islice, repeat
nthfib = lambda n: next(islice((lambda x=[0, 1]: imap((lambda x: (lambda setx=x.__setitem__, x0_temp=x[0]: (x[1], setx(0, x[1]), setx(1, x0_temp+x[1]))[0])()), repeat(x)))(), n-1, None))
>>> nthfib(1000)
43466557686937456435688527675040625802564660517371780402481729089536555417949051
89040387984007925516929592259308032263477520968962323987332247116164299644090653
3187938298969649928516003704476137795166849228875L
from itertools import imap, islice, repeat
fibgen = lambda:(lambda x=[0,1]: imap((lambda x: (lambda setx=x.__setitem__, x0_temp=x[0]: (x[1], setx(0, x[1]), setx(1, x0_temp+x[1]))[0])()), repeat(x)))()
>>> list(islice(fibgen(),12))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
+1 para hacer ejercicio interesante que me enseñó algunas cosas nuevas sobre el pitón –
¿Realmente Dirección * 3 * pitón o simplemente * * pitón? (BTW interes + 1ng ejercicio) – Wolf