Hagamos un ejercicio famoso, y esto podría surgir como una pregunta de entrevista.
Vamos a intentar implementar los números de Fibonacci y los números de Fibonacci son así.
El primer número es cero, luego el segundo número es uno, siempre comienzan con cero uno, entonces esto es lo que
sucede.
Agregamos cero con uno para igualar el siguiente número.
Sumamos uno con uno para igualar el siguiente número, sumamos uno por dos para obtener el siguiente número dos, tres para sumar
el siguiente número cinco, ocho para sumar el siguiente número.
Y así sucesivamente.
Como puede ver, esto crece exponencialmente.
Bueno, crece muy alto, muy rápido.
Y este tipo de numeración aparece mucho en la naturaleza, pero también es un problema interesante
porque estos números, aunque al principio, crecen muy, muy lentamente.
Se vuelven cada vez más grandes y más grandes, y se convierte en un problema que realmente puede acaparar los recursos.
Entonces esto es lo que quería hacer.
Vamos a crear una función.
FIB que lleva un número.
Y aquí, este número será el número índice de Fibonacci.
Entonces, por ejemplo, si fuera el número 20, debería tener esto.
Entonces, si quisiera, digamos fib 20 aquí.
En ese caso, quiero que devuelva todos estos números.
Utilizando generadores, de modo que sea uno por uno hasta que lleguemos a esta ubicación.
Ahora, hay dos formas de hacer esto que puede hacer con la lista o podemos hacerlo con un generador.
Y notarás que con un generador, es mucho más fácil de hacer que con una lista porque eventualmente
con una lista te vas a quedar sin recursos.
Entonces, lo que quiero que hagas es mostrar aquí los números que ves aquí hasta el 20.
Y si lo desea, puede seguir aumentando ese número y ver qué sucede.
Y como beneficio adicional, también puede intentar implementar esto con una lista.
Así que también se muestra en una lista gigante.
Pausa el video si quieres aquí.
De lo contrario, seguiré adelante con la respuesta.
Primero, lo que queremos hacer es decir que A va a ser igual a cero y B es igual a uno, entonces A y B van
a ser el comienzo de los números.
Ahora, aquí, vamos a usar el generador de rango.
A Lupe.
Esta cantidad de veces que vamos a proporcionar la función.
Ahora, aquí, primero, quiero ser ahora o dos ahora llamar lo que sea B, que es uno y B
para ser el siguiente número.
¿Recuerdas el rollo con Fibonacci?
Sumamos los dos primeros números para obtener el tercer número.
Entonces tenemos A B para obtener el siguiente número, luego A, B para obtener el siguiente número y luego B para obtener el siguiente número.
Entonces, lo primero que quiero hacer es rendirme y decir, oye, dame lo que sea como y luego pausar la función
hasta la siguiente parte.
Después de eso, después de que el bucle for pase a la siguiente parte, voy a decir que quiero A dos iguales a B.
Y quiero que B sea igual a A más B.
Veamos si eso tiene sentido, digo, oye, regresa o da un de esta lista para que sea
cero al principio, luego quiero que hagas un igual a uno ahora porque nos estamos mudando y luego yo quiero que B
sea igual a uno porque A se ha convertido en uno y luego en el anterior.
Entonces B se convierte en dos.
Si miramos aquí, es por eso que queremos que tengamos A y B aquí y luego queremos movernos sobre uno como
este.
Entonces B debería seguir siendo uno.
Entonces, si bien podríamos querer hacer aquí es realmente no modificar un archivo.
Hasta que podamos hacer A más B.
Entonces cómo podemos hacer esto?
Bueno, simplemente podemos decir.
Digamos que una variable temporal y esta temperatura se mantendrá en lo que sea a cuando lleguemos aquí, que es
cero, y luego modificaremos A para que sea igual a uno y luego B será en lugar de A
más, B será temp, que es cero.
Además, sea lo que sea B originalmente, que es uno que sé que puede resultar confuso, es posible que desee hacer una pausa aquí o
tal vez imprimir y ver exactamente lo que está sucediendo, pero es de esperar que nuestra función funcione ahora.
Si ahora hago algo como cuatro X en ajuste y le doy, digamos cien.
E imprimamos la respuesta.
Así que imprime.
X y yo ejecutamos esto.
Muy bien, mire eso, obtengo todos mis números de Fibonacci, hagamos 20, como vimos en el ejemplo, si hago
clic en ejecutar.
Recibo cuatro uno ocho uno.
Así que tengo 19 porque recuerde, nuestro conteo comienza en cero, así que técnicamente aquí, si queremos, podemos hacer 21 aquí,
hacer clic, correr y deberíamos obtener seis, siete, seis, cinco, que es lo que obtenemos aquí.
Muy, muy bueno, pero puedes ver cómo el número aumenta dramáticamente.
¿Hemos aumentado a mil ahora? Si hiciéramos esto en una lista, se vería así.
Copiemos aquí.
Ahora, encajar con una lista significaría que tenemos que agregar una lista aquí.
Y en lugar de ceder, se agregará el punto de resultado.
Y vamos a agregar el valor a, que es el valor inicial.
Y luego haremos lo mismo que hicimos antes, por lo que en lugar de ILT, ahora solo
estamos agregando a esta lista y al final simplemente regresamos.
El resultado de la lista ahora, si devuelvo esto, digamos, fib y le doy cien y hago clic en ejecutar,
comentemos el original con el generador.
Bueno, probablemente deberíamos imprimir esto, ¿no?
Así que imprimamos.
Y haga clic en ejecutar.
Muy bien, esa es una lista enorme.
Ahora, si tuviéramos que hacer mil aquí.
Ves que está tomando bastante tiempo.
¿Y si hacemos 10000?
Muy bien, definitivamente está tomando algo de tiempo, y pueden ver aquí lo duro que está funcionando.
¿Sabes que?
Voy a detenerlo.
Y vuelve a nuestro generador.
Camino y hagamos diez mil aquí, veamos cómo se ve diez mil con un generador.
Bueno, todavía está trabajando duro, pero no voy a guardar nada de esto en la memoria.
Lo estamos tomando uno por uno y puedo actuar sobre él en nuestro caso, simplemente imprimiéndolo uno por uno.
Ahora, esta es una pregunta común en las entrevistas, en realidad es un poco innecesariamente confusa, creo.
Pero demuestra el poder de los generadores.
Es posible que tenga que ver este video un par de veces, pero es de esperar que ahora se sienta
un poco cómodo con el uso de rangos y cómo podemos mejorar el rendimiento con generadores.
Te veo en el proximo.
Adiós.