Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- Secuencia de Fibonacci (SF) en Python
- =====================================
- Fuente: https://www.delftstack.com/es/howto/python/fibonacci-sequence-python/
- "Cada elemento de una secuencia de Fibonacci se puede representar mediante
- la siguiente fórmula matemática":
- Fórmula: https://i.postimg.cc/9MC6ggYb/fibonacci.png
- Info:
- https://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci
- DESCRIPCIÓN:
- ===========
- Los primeros 17 elementos de la SF son:
- `0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987`
- Corresponden al rango(0, 1000)
- El código emplea tres funciones:
- 1. `fibo(num)`
- 2. `fibonacci(num_i, num_f)`
- 3. `main()`
- La función `fibo(num)` tiene por objeto hallar la SF para un número dado.
- Empleando la fórmula.
- Por ejemplo:
- fibo(6)
- Produce como salida el número: `8`
- fibo(0)
- Produce como salida el número: `0`
- Ejecutar `fibo(num)` para números grandes, produce enteros gigantescos:
- Por ejemplo:
- fibo(40)
- Produce como salida el número: `102 334 155`
- fibo(100)
- Produce como salida el número: `354 224 848 179 263 111 168`
- Si solicitamos números muy altos: `fibo(1963)`, se genera un error,
- *#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#***
- # File "/home/alpfa/Pruebas_py/serie_fibonacci.py", line 75, in fibo #
- # return round(((1+sqrt(5))**num-(1-sqrt(5))**num)/(2**num*sqrt(5)), 2) #
- # #
- # OverflowError: (34, 'Numerical result out of range') #
- *#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#***
- La función `fibonacci(num_i, num_f)` tiene por objeto hallar la SF
- para un rango de números, desde un número inicial a uno final.
- Empleando para ello `fibo(num)`.
- Por ejemplo:
- fibonacci(0, 1000)
- Produce como salida los primeros 17 elementos de la SF,
- `0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987`
- La función `fibonacci(num_i, num_f)` soslaya el error reportado por la
- función `fibo(num)`. Nos permite indagar por números muy grandes en la
- definición del rango, sin generar ningún error.
- Por ejemplo:
- fibonacci(1963, 1500000)
- Produce como salida los elementos de la SF para ese rango,
- `2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025,
- 121393, 196418, 317811, 514229, 832040, 1346269`
- Created on Sun Dec 25 12:09:50 2022
- @author: alpfa
- """
- from math import sqrt
- num = int(input('Calcula la Serie de Fibonacci (SF) para un número.\n' +
- 'Ingrese el número: \n'))
- def fibo(num):
- """
- Adaptación de la fórmula para hallar cada
- elemento de la Serie de Fibonacci (SF).
- Parameters
- ----------
- num : TYPE: int | num > 1
- DESCRIPTION.
- Returns
- -------
- TYPE: float
- DESCRIPTION.
- El resultado de una raíz tiene decimales,
- han sido redondeados a dos decimales mediante round()
- """
- return round(((1+sqrt(5))**num-(1-sqrt(5))**num)/(2**num*sqrt(5)), 2)
- print((f'El elemento de la SF para el número {num} es ') +
- (f'el número: {int(fibo(num))} \n'))
- def fibonacci(num_i, num_f):
- """
- Función para hallar cada elemento de la Serie de Fibonacci (SF),
- en un rango, desde un número inicial a uno final
- Parameters
- ----------
- num : TYPE: float
- DESCRIPTION.
- Utiliza el resultado de fibo(num)
- Returns
- -------
- TYPE: float
- DESCRIPTION.
- Permite hallar los elementos de la SF en un rango.
- """
- num = 0
- cur = fibo(num)
- while cur <= num_f:
- if num_i <= cur:
- print(cur)
- num += 1
- cur = fibo(num)
- print('Para saber cuántos elementos de la SF hay en un rango, defina: \n')
- num_i = int(input('Ingrese número inicial para el rango: \n'))
- num_f = int(input('Ingrese número final para el rango: \n'))
- print('procesando para el rango solicitado...\n' +
- f'fibonacci({num_i}, {num_f})')
- def main():
- """
- Permite soslayar un posible conflicto entre variables locales y
- variables globales.
- Returns
- -------
- None.
- """
- fibo(num)
- fibonacci(num_i, num_f)
- if __name__ == '__main__':
- main()
Advertisement
Comments
-
- Desambiguación sobre `fibo(num)`:
- =================================
- num (_type_): int
- _description_:
- corresponde al `index` de la serie.
- Así `fibo(0)` nos retorna `0`, que es el primer
- elemento de la SF.
- `fibo(0)` es lo mismo que:
- SF[0] --> devuelve el primer elemento de la lista.
- Así `fibo(16)` nos retorna `987`, que es el elemento
- 17 de la SF.
- SF[16] --> devuelve el elemento 17 de la lista.
Add Comment
Please, Sign In to add comment
Advertisement