Advertisement
JPablos

fibonacci. Simple. Python

Dec 26th, 2022 (edited)
1,210
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.39 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Secuencia de Fibonacci (SF) en Python
  5. =====================================
  6.  
  7. Fuente: https://www.delftstack.com/es/howto/python/fibonacci-sequence-python/
  8.  
  9. "Cada elemento de una secuencia de Fibonacci se puede representar mediante
  10. la siguiente fórmula matemática":
  11.  
  12. Fórmula: https://i.postimg.cc/9MC6ggYb/fibonacci.png
  13.  
  14. Info:
  15.    https://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci
  16.  
  17. DESCRIPCIÓN:
  18. ===========
  19. Los primeros 17 elementos de la SF son:
  20.    `0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987`
  21. Corresponden al rango(0, 1000)
  22.  
  23. El código emplea tres funciones:
  24.  
  25.    1.  `fibo(num)`
  26.    2.  `fibonacci(num_i, num_f)`
  27.    3.  `main()`
  28.  
  29. La función `fibo(num)` tiene por objeto hallar la SF para un número dado.
  30. Empleando la fórmula.
  31.  
  32. Por ejemplo:
  33.            fibo(6)
  34.            Produce como salida el número: `8`
  35.  
  36.            fibo(0)
  37.            Produce como salida el número: `0`
  38.  
  39. Ejecutar `fibo(num)` para números grandes, produce enteros gigantescos:
  40.  
  41. Por ejemplo:
  42.            fibo(40)
  43.            Produce como salida el número: `102 334 155`
  44.  
  45.            fibo(100)
  46.            Produce como salida el número: `354 224 848 179 263 111 168`
  47.  
  48. Si solicitamos números muy altos: `fibo(1963)`, se genera un error,
  49.  
  50. *#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#***
  51. # File "/home/alpfa/Pruebas_py/serie_fibonacci.py", line 75, in fibo    #
  52. # return round(((1+sqrt(5))**num-(1-sqrt(5))**num)/(2**num*sqrt(5)), 2) #
  53. #                                                                       #
  54. # OverflowError: (34, 'Numerical result out of range')                  #
  55. *#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#**#***#***
  56.  
  57. La función `fibonacci(num_i, num_f)` tiene por objeto hallar la SF
  58. para un rango de números, desde un número inicial a uno final.
  59. Empleando para ello `fibo(num)`.
  60.  
  61. Por ejemplo:
  62.            fibonacci(0, 1000)
  63.            Produce como salida los primeros 17 elementos de la SF,
  64.            `0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987`
  65.  
  66. La función `fibonacci(num_i, num_f)` soslaya el error reportado por la
  67. función `fibo(num)`. Nos permite indagar por números muy grandes en la
  68. definición del rango, sin generar ningún error.
  69.  
  70. Por ejemplo:
  71.            fibonacci(1963, 1500000)
  72.            Produce como salida los elementos de la SF para ese rango,
  73.            `2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025,
  74.            121393, 196418, 317811, 514229, 832040, 1346269`
  75.  
  76. Created on Sun Dec 25 12:09:50 2022
  77.  
  78. @author: alpfa
  79. """
  80.  
  81. from math import sqrt
  82.  
  83. num = int(input('Calcula la Serie de Fibonacci (SF) para un número.\n' +
  84.                 'Ingrese el número: \n'))
  85.  
  86. def fibo(num):
  87.     """
  88.    Adaptación de la fórmula para hallar cada
  89.    elemento de la Serie de Fibonacci (SF).
  90.  
  91.    Parameters
  92.    ----------
  93.    num : TYPE: int | num > 1
  94.        DESCRIPTION.
  95.  
  96.    Returns
  97.    -------
  98.    TYPE: float
  99.        DESCRIPTION.
  100.        El resultado de una raíz tiene decimales,
  101.        han  sido redondeados a dos decimales mediante round()
  102.    """
  103.     return round(((1+sqrt(5))**num-(1-sqrt(5))**num)/(2**num*sqrt(5)), 2)
  104.  
  105. print((f'El elemento de la SF para el número {num} es ') +
  106.       (f'el número: {int(fibo(num))} \n'))
  107.  
  108. def fibonacci(num_i, num_f):
  109.     """
  110.    Función para hallar cada elemento de la Serie de Fibonacci (SF),
  111.    en un rango, desde un número inicial a uno final
  112.  
  113.    Parameters
  114.    ----------
  115.    num : TYPE: float
  116.        DESCRIPTION.
  117.        Utiliza el resultado de fibo(num)
  118.  
  119.    Returns
  120.    -------
  121.    TYPE: float
  122.        DESCRIPTION.
  123.         Permite hallar los elementos de la SF en un rango.
  124.    """
  125.     num = 0
  126.     cur = fibo(num)
  127.     while cur <= num_f:
  128.         if num_i <= cur:
  129.             print(cur)
  130.         num += 1
  131.         cur = fibo(num)
  132.  
  133. print('Para saber cuántos elementos de la SF hay en un rango, defina: \n')
  134. num_i = int(input('Ingrese número inicial para el rango: \n'))
  135. num_f = int(input('Ingrese número final para el rango: \n'))
  136. print('procesando para el rango solicitado...\n' +
  137.       f'fibonacci({num_i}, {num_f})')
  138.  
  139. def main():
  140.     """
  141.     Permite soslayar un posible conflicto entre variables locales y
  142.     variables globales.
  143.  
  144.    Returns
  145.    -------
  146.    None.
  147.    """
  148.  
  149.     fibo(num)
  150.     fibonacci(num_i, num_f)
  151.  
  152. if __name__ == '__main__':
  153.     main()
  154.  
Advertisement
Comments
  • JPablos
    2 years
    # text 0.51 KB | 0 0
    1. Desambiguación sobre `fibo(num)`:
    2. =================================
    3.  
    4. num (_type_): int
    5. _description_:
    6. corresponde al `index` de la serie.
    7. Así `fibo(0)` nos retorna `0`, que es el primer
    8. elemento de la SF.
    9. `fibo(0)` es lo mismo que:
    10. SF[0] --> devuelve el primer elemento de la lista.
    11. Así `fibo(16)` nos retorna `987`, que es el elemento
    12. 17 de la SF.
    13. SF[16] --> devuelve el elemento 17 de la lista.
Add Comment
Please, Sign In to add comment
Advertisement