👨‍🏫 Resuelve Fibonacci con JavaScript: solución con recursividad y con bucles

  Рет қаралды 26,461

midulive

midulive

Күн бұрын

Una de las preguntas más típicas en la universidad o pruebas técnicas de JavaScript es resolver la sucesión de números de Fibonacci! 👩‍🏫
Normalmente la gente usa la solución recursiva... pero lo cierto es que no es la mejor en cuanto optimización.
Siempre podrías usar la memoización de los resultados previos pero, la verdad, es que es mejor usar una solución iterativa. Además demuestra que entiendes el núcleo del algoritmo.
Eso sí, aunque la solución del bucle es mejor que la de recursividad... puedes usar la fórmula de Binet para calcularlo el número todavía más rápido. Aunque no creo que nadie espere que sepas esta solución de memoria:
El código sería:
function fibonacci(n) {
return Math.round((Math.pow(1.618033988749895, n) - Math.pow(-0.6180339887498949, n)) / 2.23606797749979);
}
La explicación: artofproblemso...
▶ Disfruta de los directos en: / midudev

Пікірлер: 27
@jonathang6119
@jonathang6119 Жыл бұрын
con recursión me cuesta hacerlo por la forma en la que hay que pensar.. pero con la iteración lo hice sin problemas... lo hice de esta forma en javascrit: function fibonacci(numero){ let contenedor = 0; let contador = 0; let a = 0; let b = 1; let c = 0; while(contador < numero){ contenedor = c c = a + b; a = b; b = c; contador++; }; return contenedor; }; console.log(fibonacci(10)); uso las variables A y B como los numero iniciales (0,1) y la variable C para hacer la suma de esas variables, la variable contenedor será donde se guardara cada suma, y la variable contador lo uso para detener el siclo, dentro del bucle cada vez que se repita,, A tendra el valor de B y B tendra el valor de C de esta forma se cumple la funcion de sumar los numero anteriores.
@luciadurante2996
@luciadurante2996 Жыл бұрын
Grax por el comentario. Me ayudó más a entender!
@AR7editing
@AR7editing 2 жыл бұрын
Midu seria interesante que explicaras lo del Big o, quizas buscando puedo encontrar pero nada que un god como tu lo explique porque se que entiendo de primera
@miguelcorbos4917
@miguelcorbos4917 2 жыл бұрын
me abriste la mente , del cuando como y porque se debe o no hacer un tipo de algoritmo. Grande midu.
@KaseCami
@KaseCami 2 жыл бұрын
La segunda implementacion si bien tiene mejor complejidad temporal porque estas guardando todos los resultados precalculados. Tiene una alta complejidad espacial, estas guardando en memoria una gran cantidad de datos donde la mayoria ya no la vas a usar mas, solamente te importan los 2 ultimos elementos del array. Podrias simplemente usar 2 variables y guardar ahi lo que necesitas, pasas de complejidad espacial O(|n|) a O(1)
@midulive
@midulive 2 жыл бұрын
Claro. En este caso lo dejamos así porque a veces más que el resultado final, se pide la serie completa y ahí sí necesitas guardarlos. Al final lo más fácil hubiera sido usar Binet para la complejidad más sencilla. Pero no es realista que la gente se lo sepa de memoria. :)
@KaseCami
@KaseCami 2 жыл бұрын
@@midulive tenes toda la razon, me habia olvidado completamente de la formula explicita.
@RE-Q3623
@RE-Q3623 Жыл бұрын
Estoy aprendiendo Python sin investigar como se hace ni nada, solo enfocándome en que me diera el resultado sin pensar en la optimización ya que todavía no entiendo bien lo de recurcibidad siquiera, llegué a este resultado, no se si sea el más óptimo o no pero esto me salió: fib = 0 prev_fib = 1 for i in range (1, 51): Print(fib) new_fib = fib + prev_fib prev_fib = fib fib = new_fib
@lucasgazzola
@lucasgazzola 2 жыл бұрын
Muy interesante midu, muchas gracias!
@kokolizope
@kokolizope 2 жыл бұрын
Se puede hacer con recursividad usando memoization, pero creo que el space complexity se elevaría, aún así es una solución funcional pero creo que sigue siendo más rápido en performance con loops y de igual manera, aún un poco más rápido con while en lugar de un for y ni se diga si se usan variables temporales en vez de un array. ¡Saludos! const fiboRec = (n, memo = {}) => { if (n in memo) return memo[n]; if (n === 0) return 0; if (n === 1) return 1; memo[n] = fiboRec(n - 2, memo) + fiboRec(n - 1, memo); return memo[n]; } console.time('fiboRec'); console.log('fiboRec',fiboRec(1000)); console.timeEnd('fiboRec'); const fiboLoop = n => { const fib = [0,1]; for(let i = 2; i { const fib = [0,1]; let i = 2; while (i { let n_1 = 1; let n_2 = 0; let i = 2; while (i
@gemarin1
@gemarin1 4 ай бұрын
Para solucionar el problema del big O, deberías utilizar tail recursion.
@AdriHernandez-q5g
@AdriHernandez-q5g Жыл бұрын
Pero como es que se ejecuta ,,no entiendo .,,..
@codesandtags
@codesandtags Жыл бұрын
Por cierto, la recursividad no siempre es tan mala si se usa combinado con técnicas como "Dynamic Programming", por ejemplo, podrías tener el mismo time complexity the O(N), si agregas memoization, ya que no estarías volviendo a calcular las partes más pequeñas. Ejemplo: ```javascript function fibonacciMemoization(n, memo = {}) { if (memo[n]) { return memo[n] } if (n
@joseignaciorobles9068
@joseignaciorobles9068 10 ай бұрын
No entiendo por qué la recursividad la planteó de esa manera, yo la armé de la siguiente manera imprimiendo logs de forma creciente y funciona, siendo de orden N: function fibonacci( n, h, i ){ if( i > n ){ return; } console.log( i ); return fibonacci( n, i, h + i ); }
@miguelrangel2894
@miguelrangel2894 2 жыл бұрын
en retries de cosas está bueno usar recursividad.
@alejandroruizmay8564
@alejandroruizmay8564 2 жыл бұрын
que usas para probar codigo de js
@mizaelparedesvielma8221
@mizaelparedesvielma8221 2 жыл бұрын
runJS
@franciscoruiz3758
@franciscoruiz3758 2 жыл бұрын
Tienes servicio de acesorias o desarrollo web?
@Pirater666l
@Pirater666l Жыл бұрын
como se llama el editor que stá usando??
@codesandtags
@codesandtags Жыл бұрын
Se llama runjs, y es un programa que instalas y puedes ejecutar código JavaScript usando algunos temas como Dracula, y puedes ver la ejecución ahí mismo. (Similar a QuokaJs)
@remii2595
@remii2595 2 жыл бұрын
Gyro Zeppeli controla muy bien el giro Fubonacci
@Io-fi7em
@Io-fi7em 2 жыл бұрын
Muchas Gracias!
@monoDevs
@monoDevs 2 жыл бұрын
Como hacer un algoritmo que muestre, los 50 primeros números primos de la serie Fibonacci. Necesito ayuda
@midulive
@midulive 2 жыл бұрын
Pero si justamente este vídeo te da la solución!!!!
@dragonOfLemons
@dragonOfLemons 8 ай бұрын
@@midulive Es que no se entendió, no se entiende como se ejecuta
@midulive
@midulive 8 ай бұрын
@@dragonOfLemons No lo entendiste, que es diferente. La recursividad puede ser un tema complejo y requiere también que hagas un esfuerzo para estudiarlo.
@biglittleyisus
@biglittleyisus 2 жыл бұрын
Te amo
She made herself an ear of corn from his marmalade candies🌽🌽🌽
00:38
Valja & Maxim Family
Рет қаралды 18 МЛН
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН
Enceinte et en Bazard: Les Chroniques du Nettoyage ! 🚽✨
00:21
Two More French
Рет қаралды 42 МЛН
It works #beatbox #tiktok
00:34
BeatboxJCOP
Рет қаралды 41 МЛН
7 Design Patterns EVERY Developer Should Know
23:09
ForrestKnight
Рет қаралды 169 М.
RECURSIVIDAD DESDE CERO - Explicacion y ejemplos con #JavaScript
19:51
Programación en español
Рет қаралды 4,1 М.
El drama de ESTADOS UNIDOS es brutal
11:30
midulive
Рет қаралды 76 М.
¿Por qué este Algoritmo está en tantos Videojuegos? - A* Explicado
15:38
She made herself an ear of corn from his marmalade candies🌽🌽🌽
00:38
Valja & Maxim Family
Рет қаралды 18 МЛН