Serie de Fibonacci
La serie o sucesión de Fibonacci es una serie de números en la que cada elemento es la suma de los dos anteriores.
La más conocida es la formada por los siguientes números:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144…
Este contenido está restringido.
HAZTE PREMIUM
para difrutar de los audios y vídeos exclusivos.
De hecho, a simple vista vemos que sería lo siguiente:
0, 0+1, 1+1, 1+2, 2+3, 3+5...
¿Y cómo podríamos implementarlo en Kotlin?
Qué tal si pruebas a hacerlo primero y luego vuelves a ver una solución. 😉
…
Y digo una solución.
Porque evidentemente se podría implementar de otro modo:
/** * O(2^n) */ fun fibonacci(number: Int): Int { if (number <= 1) { return number } return fibonacci(number - 2) + fibonacci(number - 1) }
Y aquí un test supersencillito para chequearla:
import org.junit.Assert.assertTrue import org.junit.Test class FibonacciKtTest { @Test fun `check fibonacci function works properly`() { assertTrue(0 == fibonacci(0)) assertTrue(1 == fibonacci(1)) assertTrue(1 == fibonacci(2)) assertTrue(2 == fibonacci(3)) assertTrue(3 == fibonacci(4)) assertTrue(5 == fibonacci(5)) assertTrue(8 == fibonacci(6)) } }
A destacar es que usa recursividad. Y que tiene una puntuación Big O de O(2^n)
.
Contenido del audio
Transcripción
Serie de Fibonacci. La serie o sucesión de Fibonacci es una serie de números en la que
cada elemento es la suma de los dos anteriores. La más conocida es la formada por los siguientes
números que sería el 0, el 1, el 1, el 2, el 3, 5, 8, 13, 21, 34, 55, 85, 89, 144 y seguiremos
para allá que de hecho a simple vista lo que hemos dicho es la suma de los dos elementos
anteriores. El primero sería 0, el segundo sería 0 más 1, el tercero sería 1 más 1,
el siguiente 1 más 2, 2 más 3, 3 más 5, etcétera, etcétera. Y bueno, ¿y esto cómo
podríamos implementarlo en Kotlin? Bueno, pues yo te recomiendo que lo intentes hacer
tú por ti mismo antes de no deberías ser demasiado complicado o sí, que estas cosas
ya te voy a dejar una pistilla y es que podrías, incluso me ha teria ido a decir que deberías
utilizar recursividad. Así que si quieres puedes coger a probar, a iniciar una implementación
en Kotlin y después aquí en la entrada de la web que será gabimoreno.soy/fibonacci
con 2 Cs, pues puedes ver la solución. Entonces yo no te la voy a decir, así que te la dejo
ahí, de hecho tienes un test unitario para probar. De hecho, valga la redundancia, te
recomiendo si por ejemplo quieres mejorar tus habilidades de hacido test unitarios, hacer
este tipo de cosas, es decir, vamos a ver, hacer un test unitario de esto debería de
ser muy, muy sencillo. ¿Por qué? Bueno, en comparación, no quiero decir que sea sencillo,
me refiero que en comparación con testear algo más tal, pues evidentemente esto es
mucho más sencillo, porque claro, lo tenemos, tenemos una función pura, sin más, no hay
nada de Android, no hay nada de arquitectura, es simplemente una función que hace un algoritmo
o lo que sea. Entonces esto es una muy buena manera de empezar a coger familiaridad con
los test unitarios. Y bueno, un comentarte que, y aquí otra pistilla para el tema de
hacer el algoritmo, es que la apuntación de Big O, de la notación Big O, sería de
O de 2 elevado a N. Un poco más que añadir, ¿vale? Venga, hasta ahora.