Serie de Fibonacci en Python | Código, algoritmo y más
Serie de Fibonacci en Python | Código y algoritmo
Introducción
La serie de Fibonacci en python es una secuencia matemática que comienza con 0 y 1, siendo cada número subsiguiente la suma de los dos anteriores. En Python, generar la serie de Fibonacci no solo es un ejercicio clásico de programación, sino también una excelente manera de explorar soluciones recursivas e iterativas.
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) para n > 1
¿Qué es la Serie de Fibonacci?
La serie de Fibonacci es una secuencia donde cada número es la suma de los dos números anteriores, comenzando con 0 y 1.
¿Quieres aprender Python de forma gratuita? ¡Explora nuestro Curso Gratuito hoy mismo!
Fórmula Matemática para la Secuencia de Fibonacci
La fórmula matemática para calcular la secuencia de Fibonacci es:
F(n) = F(n-1) + F(n-2)
- Un pilar fundamental del RL TD(λ) y 3 Grandes Nombres
- Visión general de los algoritmos de ordenamiento Quicksort
- Cómo evaluar representaciones
Donde:
- F(n) es el enésimo número de Fibonacci
- F(n-1) es el número de Fibonacci (n-1)ésimo
- F(n-2) es el número de Fibonacci (n-2)ésimo
Definición Recursiva
La definición recursiva de la serie de Fibonacci depende del sistema recursivo.
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) para n > 1
Por lo tanto, cada número en la serie de Fibonacci se calcula incluyendo los dos números anteriores. Este método recursivo continúa generando toda la secuencia, comenzando desde 0 y 1.
También lee: Top 10 Usos de Python en el Mundo Real con Ejemplos
Serie de Fibonacci Recursiva en Python
Números de Fibonacci de manera recursiva en Python utilizando características recursivas. Aquí tienes un código Python para calcular el enésimo número de Fibonacci utilizando recursión:
Def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci (n-2)
#import csv
Serie de Fibonacci Iterativa en Python
Un método iterativo para calcular números de Fibonacci en Python consiste en utilizar bucles para construir la secuencia de forma iterativa.
Algoritmo Iterativo de Fibonacci en Python:
def fibonacci_iterative(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
fib_prev = 0 # Inicializa el primer número de Fibonacci
fib_current = 1 # Inicializa el segundo número de Fibonacci
For _ in range(2, n + 1):
fib_next = fib_prev + fib_current # Calcula el siguiente número de Fibonacci
fib_prev, fib_current = fib_current, fib_next # Actualiza los valores para la próxima iteración
return fib_current
#import csv
Comparación con el Enfoque Recursivo
Criterio de Distinción | Enfoque Recursivo | Enfoque Iterativo |
Eficiencia | Este enfoque es más eficiente para valores grandes de “n”, calculando los números de Fibonacci de manera iterativa y sin cálculos redundantes. | Este enfoque es menos eficiente, especialmente para valores grandes de “n”, ya que causa cálculos redundantes. |
Complejidad Temporal | O(n) (Lineal) | O(2^n) (Exponencial) |
Complejidad Espacial | O(1) (Constante) | O(n) (Lineal) |
Memoización para Cálculos Eficientes
La memoización es un método que acelera los programas o algoritmos de computadora almacenando los resultados de llamadas costosas a funciones y devolviendo el resultado en caché cuando se vuelven a encontrar las mismas entradas. Es útil para optimizar los cálculos de Fibonacci, ya que el enfoque recursivo recalcula los mismos números de Fibonacci muchas veces, lo que lleva a ineficiencia.
Cómo la Memoización Reduce Cálculos Redundantes
En los cálculos de Fibonacci, sin memoización, el algoritmo recursivo vuelve a calcular los mismos números una y otra vez. La memoización soluciona este problema almacenando los resultados. Cuando se llama a la función nuevamente con la misma entrada, utiliza el resultado calculado para el problema.
Implementando la Memoización en Python para Fibonacci
Así es como se implementa la memoización en Python para optimizar los cálculos de Fibonacci:
# Crear un diccionario para almacenar los números de Fibonacci calculados.
Fib_cache = {}
def fibonacci_memoization(n):
if n <= 0:
return 0
elif n == 1:
return 1
# Verificar si el resultado ya está en la memoria caché.
Si n en fib_cache:
return fib_cache[n]
# Si no, calcularlo recursivamente y guardarlo en la memoria caché.
fib_value = fibonacci_memoization(n - 1) + fibonacci_memoization(n - 2)
fib_cache[n] = fib_value
return fib_value
#import csv
Programación Dinámica para la Serie de Fibonacci en Python
La programación dinámica es una estrategia utilizada para resolver problemas dividiéndolos en subproblemas más pequeños y resolviendo cada subproblema solo una vez, almacenando los resultados para evitar cálculos redundantes. Este enfoque es muy efectivo para resolver problemas complejos como el cálculo de números de Fibonacci.
Explicación del Enfoque de Programación Dinámica para Fibonacci:
La programación dinámica implica almacenar los números de Fibonacci en un arreglo o diccionario cuando se calculan para que puedan reutilizarse cuando sea necesario. En lugar de volver a calcular los mismos números de Fibonacci, la programación dinámica los almacena una vez y los recupera según sea necesario.
Uso de un Arreglo o Diccionario para Almacenar Resultados Intermedios
El enfoque de programación dinámica se puede utilizar con un arreglo o un diccionario (tabla hash) para almacenar los números de Fibonacci intermedios.
def fibonacci_dynamic_programming(n):
fib = [0] * (n + 1) # Inicializar un arreglo para almacenar los números de Fibonacci.
Fib[1] = 1 # Establecer los casos base.
Para i en rango(2, n + 1):
fib[i] = fib[i - 1] + fib[i - 2] # Calcular y almacenar los números de Fibonacci.
Devolver fib[n] # Devolver el enésimo número de Fibonacci.
#import csv
Beneficios de la Programación Dinámica en Términos de Complejidad Temporal
El método de programación dinámica para calcular números de Fibonacci ofrece varias ventajas en términos de complejidad temporal:
Complejidad Temporal Reducida: La programación dinámica reduce la complejidad temporal de los cálculos de Fibonacci de exponencial (O(2^n)) en el enfoque recursivo ingenuo a lineal (O(n)).
Reutilización Eficiente: Al almacenar resultados intermedios, la programación dinámica evita cálculos redundantes. Cada número de Fibonacci se calcula una vez y luego se recupera de la memoria cuando sea necesario, mejorando la eficiencia.
Mejora de la Escalabilidad: El método de programación dinámica sigue siendo eficiente incluso para valores grandes de “n”, lo que lo hace adecuado para aplicaciones prácticas.
Optimización del Espacio para Fibonacci
Las estrategias de optimización del espacio para calcular números de Fibonacci tienen como objetivo reducir la utilización de memoria almacenando solo los valores previos importantes en lugar de la secuencia completa. Estas técnicas son especialmente útiles cuando la eficiencia de la memoria es una preocupación.
Uso de Variables para Almacenar Solo los Valores Previos Necesarios
Una de las estrategias de optimización del espacio más utilizadas para Fibonacci es utilizar variables para almacenar solo los dos números de Fibonacci más recientes en lugar de un arreglo para almacenar la secuencia completa.
def fibonacci_space_optimized(n):
if n <= 0:
return 0
elif n == 1:
return 1
fib_prev = 0 # Inicializar el número de Fibonacci anterior.
Fib_current = 1 # Inicializar el número de Fibonacci actual.
Para _ en rango(2, n + 1):
fib_next = fib_prev + fib_current # Calcular el siguiente número de Fibonacci.
fib_prev, fib_current = fib_current, fib_next # Actualizar los valores para la siguiente iteración.
Devolver fib_current # Devolver el enésimo número de Fibonacci.
#import csv
Compensaciones entre Complejidad Espacial y Temporal
Las técnicas optimizadas en espacio para Fibonacci vienen con compensaciones entre la complejidad espacial y temporal:
Eficiencia Espacial: Los enfoques optimizados en espacio utilizan mucha menos memoria porque solo almacenan unas pocas variables (generalmente dos) para realizar un seguimiento de los últimos números de Fibonacci. Esto es relativamente eficiente en espacio, lo que lo hace adecuado para entornos con restricciones de memoria.
Eficiencia Temporal: Si bien estas estrategias no son lineales (O(n)) en términos de complejidad temporal, pueden ser ligeramente más lentas que la programación dinámica con una matriz debido a las asignaciones de variables. Sin embargo, la diferencia normalmente es despreciable para valores prácticos de “n”.
Generando Números de Fibonacci hasta N
Generar números de Fibonacci hasta N en Python se puede hacer con un bucle. Aquí hay un código en Python que genera números de Fibonacci hasta N:
def generar_fibonacci(restriccion):
if restriccion <= 0:
return []
secuencia_fibonacci = [0, 1] # Inicializar con los dos primeros números de Fibonacci.
while True:
siguiente_fib = secuencia_fibonacci[-1] + secuencia_fibonacci[-2]
if siguiente_fib > restriccion:
break
secuencia_fibonacci.append(siguiente_fib)
return secuencia_fibonacci
#import csv
Aplicaciones de Generar Secuencias de Fibonacci dentro de un Rango
- Análisis de Series Numéricas: Generar números de Fibonacci dentro de un límite puede ser útil para analizar y estudiar secuencias numéricas, identificar patrones y explorar propiedades matemáticas.
- Análisis de Rendimiento: En ciencias de la computación y evaluación de algoritmos, las secuencias de Fibonacci se pueden utilizar para analizar el rendimiento de algoritmos y estructuras de datos, principalmente en términos de complejidad temporal y espacial.
- Pruebas de Aplicaciones: En pruebas de aplicaciones, los números de Fibonacci se pueden utilizar para crear casos de prueba con diferentes tamaños de entrada para evaluar el rendimiento y la robustez de las aplicaciones de software.
- Modelado Financiero: Las secuencias de Fibonacci tienen aplicaciones en el modelado financiero, específicamente en el estudio de tendencias del mercado y movimientos de precios en campos como la negociación de acciones y el análisis de inversiones.
Aplicaciones de la Serie de Fibonacci
La serie de Fibonacci tiene muchas aplicaciones en el mundo real. En la naturaleza, describe la disposición de hojas, pétalos y semillas en las plantas, ejemplificando un empaquetado eficiente. La Proporción Áurea derivada de las proporciones de Fibonacci se utiliza para crear composiciones y diseños estéticamente deseables. En tecnología, los números de Fibonacci desempeñan un papel en la optimización de algoritmos, como la programación dinámica y la memorización, mejorando el rendimiento en tareas como el cálculo de valores de Fibonacci masivos o la resolución de problemas de optimización. Además, las secuencias de Fibonacci se utilizan en el modelado financiero, ayudando en el análisis del mercado y la predicción de tendencias de precios. Estas aplicaciones del mundo real destacan la importancia de la serie de Fibonacci en las matemáticas, la naturaleza, el arte y la resolución de problemas.
La Proporción Áurea de Fibonacci
La Proporción Áurea de Fibonacci, a menudo representada como Phi (Φ), es un rango irracional aproximadamente igual a 1.61803398875. Esta constante matemática está profundamente entrelazada con la serie de Fibonacci. A medida que avanzas en la serie de Fibonacci, la proporción entre números de Fibonacci consecutivos se aproxima cada vez más a Phi. Esta conexión da lugar a principios estéticos en el diseño, donde los elementos suelen estar proporcionados a Phi, creando composiciones visualmente armoniosas. Ejemplos prácticos incluyen la arquitectura del Partenón, obras de arte como la Mona Lisa y las proporciones del rostro humano, resaltando el uso extensivo de la Proporción Áurea en la creación de diseños estéticamente fascinantes y equilibrados en numerosos campos, desde el arte y la arquitectura hasta el diseño gráfico y web.
Fibonacci en Trading y Finanzas
La serie de Fibonacci juega un papel crucial en el trading y las finanzas a través de los niveles de retroceso y extensión de Fibonacci en el análisis técnico. Los traders utilizan estos niveles para identificar posibles puntos de soporte y resistencia en los mercados financieros. La serie de Fibonacci ayuda a predecir las tendencias del mercado de valores al identificar niveles de precios clave donde es probable que ocurran inversiones o extensiones. Las técnicas de trading de Fibonacci implican el uso de estos niveles en conjunto con indicadores técnicos para tomar decisiones comerciales fundamentadas. Los traders buscan regularmente patrones de Fibonacci, como la Proporción Áurea, para ayudar a predecir movimientos de precios.
Conclusión
Aunque aparentemente arraigada en las matemáticas, la serie de Fibonacci también tiene relevancia en la ciencia de datos. Comprender los principios de generación de secuencias y reconocimiento de patrones inherentes en la serie de Fibonacci puede ayudar a los científicos de datos a reconocer y analizar patrones recurrentes dentro de conjuntos de datos, un aspecto fundamental del análisis de datos y la modelización predictiva en la ciencia de datos. Inscríbete en nuestro curso gratuito de Python para mejorar tus habilidades en Python.