Leonardo de Pisa (1180-1240), no sabía que uno de los problemas contenidos en su libro Liber Abaci lo haría inmortal.
¿Cuántas parejas de conejos tendremos a fin de año, si comenzamos con una pareja que produce cada mes otra pareja que procrea a su vez a los dos meses de vida?
La respuesta queda como sigue:
- El primer mes , tenemos una pareja de conejos.
- El segundo mes, la pareja envejece (todavía no procrea)
- El tercer mes, la pareja procrea otra pareja, o sea que ya tenemos dos.
- El cuarto mes, la pareja más vieja vuelve a procrear, mientras que la segunda envejece. En total, tenemos 3 parejas.
- El quinto mes, las dos parejas más viejas procrean de nuevo, y la tercera envejece. En total, tenemos 3+2=5
- El sexto mes, las tres parejas más viejas procrean, y las dos más nuevas envejecen, de manera que tenemos 5+3 = 8.
- Y así sucesivamente ....
{1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765}
en algunos textos la serie se inicia con el 0, pero si el criterio es que un término es suma de los dos anteriores, con el 0 como inicio poco podemos avanzar.
A la hora de realizar un programa para calcular los términos de la serie, lo podemos efocar de varias maneras, vamos a ver dos de ellas:
- Método directo aplicando la generación de términos
- Mediante métodos recursivos
- Mediante métodos iterativos
En Python el primer método quedaría:
def fibonacci(n):
a, b = 1,1
for i in range(1,n+1):
print(i, a, end=' ')
a, b = b, a+b
print()
n_t = int(input("Introduce el número de términos "))
print ('Los {0} primeros términos de la serie de Fibonaccci'.format(n_t))
fibonacci(n_t)
En este caso introducimos el número de términos de la serie que queremos
Para el segundo caso, el recursivo, también en Python, quedaría:
def fibonacci(n):
if n==1 or n==2:
resultado=1
elif n>2:
resultado=fibonacci(n-1)+fibonacci(n-2)
return resultado
n_t = int(input("Introduce el valor de termino "))
for i in range(1, n_t + 1):
print('El {0} término de la serie de Fibonaccci es {1}'.format(i,fibonacci(i)))
Y por último mediante métodos iterativos, es decir mediante un fórmula, que nos de el valor del término que estamos buscando, en este caso usaremos la deducida por Edouard Lucas.
def fibonacci(n):
resultado=(((1+5**0.5)/2)**n-((1-5**0.5)/2)**n)/5**0.5
return resultado
n_t = int(input("Introduce el valor de termino "))
for i in range(1, n_t + 1):
print('El {0} término de la serie de Fibonaccci es {1}'.format(i,int(fibonacci(i))))
También podemos usar las funciones de los programas de cálculo numerico o simbólico existentes:
En Mathematica podemos usar la expresión :
Table[Fibonacci[n], {n, 20}] Para obtener los 20 primeros elementos de la sucesión
Si queremos usar la expresión de Lucas, lo podemos implementar así:
F[n_] = (((1 + Sqrt[5])/2)^n - ((1 - Sqrt[5])/2)^n)/Sqrt[5];
N[Table[F[n], {n, 20}]]
continuamos sumando conejos....
No hay comentarios:
Publicar un comentario