Series de Fibonacci en Python con estos 3 métodos.

Leonardo de Pisa, más conocido como Fibonacci, fue un matemático italiano que vivió en el siglo XIII. Es famoso por su libro “Liber abaci“, que contiene una serie de números que ahora se conocen como la serie de Fibonacci.

La serie de Fibonacci es una secuencia de números enteros en la que cada número es la suma de los dos anteriores. La secuencia comienza con 0 y 1, y los siguientes números son 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, …

La serie de Fibonacci tiene muchas propiedades interesantes. Por ejemplo, la proporción entre dos números consecutivos de la serie se aproxima cada vez más al número áureo, que es un número irracional con una longitud infinita de decimales. El número áureo se considera a menudo una proporción estéticamente agradable, y se encuentra en muchas obras de arte y arquitectura.

La serie de Fibonacci también se encuentra en la naturaleza. Por ejemplo, la disposición de los pétalos de una flor de girasol, las escamas de una piña o las espirales de una concha de caracol siguen la serie de Fibonacci.

La serie de Fibonacci ha sido objeto de estudio de matemáticos, biólogos y artistas durante siglos. Es una serie fascinante que tiene aplicaciones en muchas áreas diferentes del conocimiento.

En este artículo

Aplicaciones de la serie de Fibonacci

La serie de Fibonacci tiene aplicaciones en muchas áreas diferentes del conocimiento, incluyendo:

  • Matemáticas: la serie de Fibonacci se utiliza en el estudio de los números primos, la teoría de números y la geometría.
  • Biología: la serie de Fibonacci se encuentra en la estructura de las plantas, los animales y los organismos vivos.
  • Arte: la serie de Fibonacci se utiliza en el diseño artístico, la arquitectura y la música.
  • Finanzas: la serie de Fibonacci se utiliza en el análisis técnico de los mercados financieros.

Método tradicional

Pero este artículo trata sobre Python. El primer método es el más simple y yo lo llamo método tradicional.

n1 = 0
n2 = 1

contador = 0

while contador < 20:
    print(n1)
    n = n1 + n2
    n1 = n2
    n2 = n
    contador += 1

Cómo pueden ver es muy simple. Iniciamos la serie con 0 y 1.

Posteriormente calculamos el nuevo número sumando n1 y n2. Y luego ajustamos los valores de n1 y n2 para el siguiente ciclo.

Este es el resultado.

❯ python fibonacci.py
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181

Usando Listas


En Python, una lista es una estructura de datos que permite almacenar una colección de datos de cualquier tipo.

Se me ocurrió que podría empezar con una lista [0,1] y calcular el siguiente número jugando un poco con el índice de la lista.

# El inicio de la serie
f = [0, 1]

i = 0

while i < 20:
    # agregamos los nuevo valores a la lista.
    f.append(f[i] + f[i + 1])
    i += 1

print(f)

De esta forma, el nuevo elemento de la lista es la suma de los dos elementos anteriores. Simple y elegante.

❯ python fibonacci_listas.py
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946]

Método Recursivo


En programación, la recursividad es una técnica que permite que una función se llame a sí misma. La recursividad se utiliza para resolver problemas que se pueden dividir en subproblemas más pequeños que son similares al problema original.

Vean este ejemplo de código:

def fibonacci_recursivo(n):
    if n <= 1:
        return n
    else:
        # muestra como se va generando el número siguiente.
        print(
            "i=",
            i,
            "n=",
            n,
            fibonacci_recursivo(n - 1),
            "+",
            fibonacci_recursivo(n - 2),
        )
        return fibonacci_recursivo(n - 1) + fibonacci_recursivo(n - 2)


for i in range(7):
    print("->", fibonacci_recursivo(i))

En las lineas 6 a la 14 y en la línea 19 agregué unas funciones print() para que se pueda visualizar cuantas veces se visita la función fibonacci_recursivo antes de poder calcular el siguiente número de la serie.

En lo personal me parece poco práctico, pero lo pongo porque es uno de los ejemplos clásicos de recursión en programación.

Este es el resultado:

-> 0
-> 1
i= 2 n= 2 1 + 0
-> 1
i= 3 n= 2 1 + 0
i= 3 n= 3 1 + 1
i= 3 n= 2 1 + 0
-> 2
i= 4 n= 2 1 + 0
i= 4 n= 3 1 + 1
i= 4 n= 2 1 + 0
i= 4 n= 2 1 + 0
i= 4 n= 4 2 + 1
i= 4 n= 2 1 + 0
i= 4 n= 3 1 + 1
i= 4 n= 2 1 + 0
i= 4 n= 2 1 + 0
-> 3
i= 5 n= 2 1 + 0
i= 5 n= 3 1 + 1
i= 5 n= 2 1 + 0
i= 5 n= 2 1 + 0
i= 5 n= 4 2 + 1
i= 5 n= 2 1 + 0
i= 5 n= 3 1 + 1
i= 5 n= 2 1 + 0
i= 5 n= 2 1 + 0
i= 5 n= 2 1 + 0
i= 5 n= 3 1 + 1
i= 5 n= 2 1 + 0
i= 5 n= 5 3 + 2
i= 5 n= 2 1 + 0
i= 5 n= 3 1 + 1
i= 5 n= 2 1 + 0
i= 5 n= 2 1 + 0
i= 5 n= 4 2 + 1
i= 5 n= 2 1 + 0
i= 5 n= 3 1 + 1
i= 5 n= 2 1 + 0
i= 5 n= 2 1 + 0
i= 5 n= 2 1 + 0
i= 5 n= 3 1 + 1
i= 5 n= 2 1 + 0
-> 5
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 4 2 + 1
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 5 3 + 2
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 4 2 + 1
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 4 2 + 1
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 6 5 + 3
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 4 2 + 1
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 5 3 + 2
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 4 2 + 1
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
i= 6 n= 4 2 + 1
i= 6 n= 2 1 + 0
i= 6 n= 3 1 + 1
i= 6 n= 2 1 + 0
i= 6 n= 2 1 + 0
-> 8

Graficar Fibonacci con Matplotlib

Matplotlib es una librería de Python que permite crear visualizaciones de datos. Es una herramienta poderosa y flexible que se puede utilizar para crear una amplia variedad de gráficos, incluyendo diagramas de barras, diagramas de dispersión, histogramas, diagramas de líneas, etc.

Veamos un ejemplo usando el método de listas.

import matplotlib.pyplot as plt

f = [0, 1]
i = 0

x = []
y = []

for n in range(1, 20):
    f.append(f[i] + f[i + 1])
    x.append(n)
    y.append(f[-1])
    i += 1

plt.plot(x, y)
plt.xlabel("Número de Fibonacci")
plt.ylabel("Valor del número de Fibonacci")
plt.show()
Gráfica de Matplotlib

Espero que este artículo les sea de utilidad ¡Hasta la próxima!

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.