Hoy te enseñaré cómo trabajar con la secuencia Fibonacci en Python. Te enseñaré a obtener el número que va en determinada posición, así como imprimir toda la serie hasta determinado número.
Veremos las dos formas de trabajar con esta sucesión en Python: de manera iterativa con un ciclo for, y de manera recursiva invocando a la función dentro de sí misma.
Sobre la sucesión Fibonacci
Esta sucesión comienza en 0 y 1. Después, cada elemento es la suma de los dos anteriores. La serie comienza así:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,6765
Para este caso podemos decir que el Fibonacci de 7 es 13, pues en la posición 7 está el 13 (contando desde la posición 0). Pues bien, veamos cómo obtener el Fibonacci de determinado número y cómo imprimir la secuencia hasta determinado número usando Python.
Serie con ciclo for
Comencemos viendo cómo hacer esta sucesión usando un ciclo, con el método iterativo. Aquí también es donde podemos imprimir la secuencia, pero además podemos regresar el valor que va en la posición N de Fibonacci.
def fibonacci_iterativo(posicion, debe_imprimir):
actual = 0
siguiente = 1
for x in range(posicion + 1):
if debe_imprimir:
print(str(actual) + ",", end="")
temporal = actual
actual = siguiente
siguiente = siguiente + temporal
return temporal
Como puedes ver, la función recibe un número que indica la posición de Fibonacci que se quiere devuelta, pero además recibe un parámetro que le indica si debería imprimir la sucesión.
Fibonacci recursivo
Ahora veamos el otro enfoque de manera recursiva. En este caso no proporcionamos la manera de imprimir el valor, simplemente devolvemos el valor de la serie que va en la posición dada por el argumento.
def fibonacci_recursivo(posicion):
if posicion < 2:
return posicion
return fibonacci_recursivo(posicion - 1) + fibonacci_recursivo(posicion - 2)
La condición de salida de esta función recursiva (es decir, lo que indica que la recursividad termina) es que la posición sea menor que 2.
Uso de las funciones
Es momento de ver el uso de estas funciones. Primero veamos cómo imprimir la sucesión hasta determinado número sin que nos importe el valor de retorno:
posicion = 20
# Imprimir sin importar el resultado
print(f"Imprimiendo serie hasta posición {posicion}")
También podemos obtener el Fibonacci que va en determinada posición:
posicion = 20
# Obtener valor pero no imprimir
valor = fibonacci_iterativo(posicion, False)
print(f"\nFibonacci de {posicion} con método iterativo es {valor}")
# Lo mismo de arriba pero con el método iterativo
valor = fibonacci_recursivo(posicion)
print(f"Fibonacci de {posicion} con método recursivo es {valor}")
Solo ten cuidado con el método recursivo cuando la posición sea un valor grande, pues puede llevarse su tiempo. En caso de que quieras algo rápido, usa el método iterativo.
Poniendo todo junto
El código completo de Python para tratar con la serie del artículo queda como se ve a continuación:
"""
https://parzibyte.me/blog
"""
def fibonacci_iterativo(posicion, debe_imprimir):
actual = 0
siguiente = 1
for x in range(posicion + 1):
if debe_imprimir:
print(str(actual) + ",", end="")
temporal = actual
actual = siguiente
siguiente = siguiente + temporal
return temporal
def fibonacci_recursivo(posicion):
if posicion < 2:
return posicion
return fibonacci_recursivo(posicion - 1) + fibonacci_recursivo(posicion - 2)
posicion = 20
# Imprimir sin importar el resultado
print(f"Imprimiendo serie hasta posición {posicion}")
fibonacci_iterativo(posicion, True)
# Obtener valor pero no imprimir
valor = fibonacci_iterativo(posicion, False)
print(f"\nFibonacci de {posicion} con método iterativo es {valor}")
# Lo mismo de arriba pero con el método iterativo
valor = fibonacci_recursivo(posicion)
print(f"Fibonacci de {posicion} con método recursivo es {valor}")
Al ejecutarlo en mi caso, los valores son correctos. Recuerda que la posición cuenta desde 0.
Te invito a leer más sobre Python en mi blog.