Sucesión de Fibonacci con Python - Algoritmos implementados en Python
Introducción:
Hola amigos de Internet. Les doy la bienvenida a Mi Diario Python, el mejor lugar para Aprender a programar en Python. En este articulo nos dedicaremos a conocer la Sucesión de Fibonacci y realizaremos algunas implementaciones de los algoritmos utilizados para generar esta sucesión.
Sucesión de Fibonacci:
La sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:
...
La sucesión comienza con los números 0 y 1, y a partir de estos cada termino es la suma de los dos anteriores.
En la siguiente imagen, podemos observar un poco del proceso de la secuencia:
A los elementos de esta sucesión se les llama números de Fibonacci. Esta fue descrito en Europa por Leonardo de Pisa, también conocido como Fibonacci.
Los números de Fibonacci quedan definidos por la ecuación:
Partiendo de dos valores:
Se obtienen:
Para
Algoritmos:
- si entonces
- devuelve
- en otro caso
- devuelve
Como podemos observar, aquí hay una propiedad muy interesante. La cual es la recursión, la cual se produce cuando una función se llama así misma en su cuerpo.
Creo que ahora podemos empezar a escribir el código:
def fib(n): if n < 2: return n else: # fn = fn-1 + fn-2 return fib(n-1) + fib(n-2) fib(8)
21
Y el resultado cuando n = 8, es 21. Si lo calculamos, veremos que es correcto.
Si quieres la sucesión con una longitud determinado, podemos utilizar un bucle:
for x in range(10): print(fib(x))
0 1 1 2 3 5 8 13 21 34
Increíble ¿No lo crees?
Pero por que llegar hasta aquí. Veamos otras maneras de implementar este algoritmo:
Podemos encontrar otra formula que nos permite generar esta sucesión.
Sí, lo se, da miedo ¿Verdad? No te preocupes. Esta muy fácil.
Lo único que debemos tener en cuenta es que:
También tenemos el pesudocódigo:
- si entonces
- devuelve
- en otro caso
-
- devuelve
En Python, nos quedaría algo así:
# sqrt para calcular raices cuadradas from math import sqrt def fib(n): if n < 2: return n else: u = ((1+sqrt(5))/2) j = ((u**n-(1-u)**n)/sqrt(5)) # round nos permite redondear numeros flotantes return round(j)
fib(9)
34
Y el resultado es satisfactorio. Como pueden observar, en este ejemplo hago uso del método round, el cual nos permite redondear números flotantes. De no utilizar round el resultado seria algo así:
34.00000000000001
Podemos realizar un algoritmo más sencillo, para aquellos que recién empiezan en el ámbito de la programación:
El pseudocódigo es el sigueinte:
- para desde
hasta
hacer
- devuelve
En Python, nos quedaría algo así:
def fib(n): a = 0 b = 1 for k in range(n): c = b+a a = b b = c return a fib(9)
34
Puedes escoger la opción que prefieras. Espero que te sea de mucha ayuda.
¿Alguna duda? No dudes en dejar tu comentario.
Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
-
Esta es mi versión de la serie de fibonacci con recursividad. He probado con números elevados y es bastante más eficiente:
def fibonacci(n,a=0,b=1):
while n!=0:
return fibonacci(n-1,b,a+b)
return aprint(fibonacci(900))
-
Ánimo.python se gana el paraiso
-
r=int(input('Ingrese el numero para comenzar : '))
m1 = 1
m2 = 1
suma=0
controlador = 0
if r <= 0:
print('Dato erroneo, ingrese numero positivos>0')
elif r == 1:
print(m1)
else:
while controlador<r:
print(m1)
suma = m1 + m2
#"Auxiliar"
m1 = m2
m2 = suma
controlador += 1Aquí les dejo la mía :3
-
q significa k y pq se pone c en la ultima forma
-
me podrian ayudar a relizar esto por favor:
Desarrolle un algoritmo, representado en un diagrama de flujo, que reciba como entrada un
número entero n, y entregue como salida el n-ésimo número de Fibonacci, -
Cómom hago para que se guarde en memoria el codigo y por lo tanto me consuma menos tiempo el ejecutar?
-
Escriba un programa que calculé los números de Fibonacci a partir de fib(n)=fib(n-1)+fib(n-2) sabiendo que fib(0)=0 y fib(1)=1, por lo que fib(2)=fib(0)+fib(1)=0+1=1y así sucesivamente. Su programa debe imprimir la serie completa hasta el valor fib(n)
-
Buenas noches.
me parecio muy interesante el codigo que pone como ejemplo para el fibonacci.
pero megenera una pregunta y es como se hace para que la persona diguite en munero que desee.
ejemplo si la persona diguita 7 tendria que salir el valor 13 segun la escala de fobonacci
Deja una respuesta
El artículo muy bien explicado, principalmente por mostrar tres algoritmos distintos para obtener la sucesión de Fibonacci, solo creo que faltaría adicionar en cada uno de ellos su complejidad algorítmica y dejar bien claro que aunque la recursividad es muy buena en algunos casos y que puede demostrar un nivel avanzado del programador, en este caso no es buena. La mejor opción es la última, es decir la opción iterativa