python

Fibonacci en Python

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.

Fibonacci en Python – Método iterativo, recursivo e impresión de serie

Te invito a leer más sobre Python en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.