â Resuelvo el ejercicio de Fibonacci en JavaScript sin recursividad
āļāļąāļ
- āđāļāļĒāđāļāļĢāđāđāļĄāļ·āđāļ 6 āļ.āļĒ. 2024
- ð La sucesioĖn o serie de Fibonacci es, seguramente, uno de los ejercicios maĖs tiĖpicos en entrevistas de trabajo o de universidad.
ðĪ Muchas veces se resuelve con recursividad pero lo cierto es que no es la mejor maĖs oĖptima.
ðĪĢ Con un simple bucle puede sacar el resultado sin los problemas de rendimiento de la recursividad y quedas genial porque entiendes exactamente el problema.
ð Eso sÃ. ESTA NO ES LA SOLUCIÃN MÃS ÃPTIMA (aunque es mejor que la de recursividad). La mÃĄs Ãģptima serÃa usando la fÃģrmula de Binet:
ð ÂĄY asiĖ mejoras tu loĖgica de programacioĖn!
ðŽ ÂŋQueĖ te parece? ÂŋQueĖ otro problema podriĖamos hacer?
#shorts - āļ§āļīāļāļĒāļēāļĻāļēāļŠāļāļĢāđāđāļĨāļ°āđāļāļāđāļāđāļĨāļĒāļĩ
A los que estamos iniciando, VAMOOOOOS NO SE RINDAAAAN
El mÃĐtodo utilizado se llama Dynamic Programming (por si a alguien le interesa)
Memoization es
umm. no es memoization, cuando la funciÃģn termina, el gc libera la memoria utilizada dentro de esa funciÃģn. el coste del algoritmo sigue siendo lineal
No, eso no es DM, es una algoritmo iterativo, la dm siempre se.basa en recursividad. Este algoritmo tiene una big O de espacio constante, cosa muy diferente a la DM
hombre de cultura
Prefiero que usted nos enseÃąe, en lugar de estos supuestos gurÚs que no explican lo que hacen.
Yo viendo vÃdeos de programaciÃģn cuando no se de programaciÃģn ni un clo:
Same jajaja
Te recomiendo empezar con la lÃģgica usa raptor primero ð
â@@juliocesarhuerta9383como es eso
X2
â@@hunnyesEn un programa en el que inicias xon speudocodigo y entrenas asi la logica
Justamente hoy tenÃa entrevista, y como reto era este problema. Gracias a la explicaciÃģn de @midudev he podido lograrlo y poder pasar la prueba. ððŧððŧððð Gracias Midu.
felicidades amigo ðð
Que puta suerte
Sera creerte ð
Te juro este video me sirvio mucho, solo dejame terminar de aprender Javascript y regreso.
Es verdad ð
Jaaa bebÃĐ
Puedes usar dos variables auxiliares en lugar de un array, eso mejorarÃa la complejidad de espacio de O(|num|) a O(1), y claro, serÃa mÃĄs rÃĄpido aÚn
SÃ! Esta seria la mejor respuesta
Pero supongo que el querÃa usar programaciÃģn dinamica
@@edtecs48 pero porque no use un array. No deja de ser programaciÃģn dinÃĄmica, ya que esas variables que mencionÃģ funcionan de cache de igual forma y requieren menos espacio. No requerimos de todos los resultados anteriores de la serie de fibonacci, con los dos anteriores basta, por eso las variables auxiliares.
@Pure Coding View no te entendà del todo podrÃas ser un poco mÃĄs explicito, gracias, saludos
@@EvolucionMascuina El compa del video almacena un valor en array por cada nÚmero de secuencia que ocupes, si quieres sacar el 4to elemento de fibbonacci terminaras en el pero de los casos con 4 elementos almacenados en array, esto muestra una relaciÃģn lineal entre la posiciÃģn de la secuencia que quieres sacar y la cantidad de datos a almacenar, esto se representa como que la memoria usada en este programa es O(n), el propone solo guardar el mÃnimo de varÃables para que el programa funcione osea 2, y como sin importar cuantos nÚmeros de fibbonacci quieres siempre utilizarÃĄs solo 2 datos en memoria esta siempre es la misma, esta se denota como O(1) en memoria
Ya lo comprendÃ!!!! es genial... (acuÃĐrdate que algunos estamos empezando...) eres un crack! --
En Python ððž
def fib(n):
i = 2
f = [0,1]
print(f)
while i
Wow me gusta esta forma de hacer la serie de Fibonacci ðŪ
No creo que para un novato sea tan Sencillo tienes bien desarrollado tu lÃģgica
Gratos recuerdos. Con un ejercicio de Fibonacci entendi el concepto de la recursividad y como aplicarlo.
El tiempo de complejidad y espacio es de O(N), este problema se puede resolver en espacio constante O(1) en vez de crecer el index del array se puede ir re calculando las posiciones 0 y 1.
Si quieren ir un paso mÃĄs y resolverlo en tiempo y espacio O(1) pueden checar resolverlo con nÚmero ÃĄureo
Estoy dr acuerdo, porque si N es un nÚmero grande montarÃamos un array dinÃĄmico que ocuparÃa mucha RAM
Literalmente mÃĄs fÃĄcil que la recursividad
Nunca me gustÃģ usar recursividad
Elegancia seÃąores!
Literal tienes que saber como funciona los nÚmeros de Fibonacci para este tipo de ejercicios, osea saber matemÃĄticas.
Recuerdo que en Apache Netbeans me pidieron hacer uno de las ecuaciones cuadraticas, Fibonacci y el desafÃo era integrales definidas.
El mÃĐtodo mÃĄs eficiente para resolver este tipo de algoritmos, en los que necesitas iteraciones anteriores para calcular las siguientes son los algoritmos recursivos con memoria, pero el concepto es muy parecido al array que utilizas, yo suelo usar un map en Java.
Si devuelves fib[num] devulves solo el Último elemento y no la serie completa
Pues, toma tu like chaval.
Y podrÃas ahorrar mucha mas memoria incluso si es que solo trabajas con esos dos nÚmeros, es decir, desplazando el 1 dÃģnde estÃĄ el 0 y colocar la suma donde estaba el 1
se puede calcular el i esimo termino en log(n)
MUCHAS GRACIAS EL TERMINO ES DE PROGRAMACION?
Que solucion tan elegante ð§
en el c++ serÃa el acumulador ?? o como es ð
En c++ es
int a=0, b=1, c=0;
for(las veces que lo pidan){
c=a+b;
a=b;
cout
perdon la ignorancia, porque es i-1 e i-2? el "i-1" es por el array que tiene 2 posiciones, pero el "i-2"?
Es por que cada nÚmero en la serie de fibo se compone de la suma de los dos anteriores nÚmeros en esta serie. En este caso se inicia un array con los dos primeros valores de la serie, posteriormente, se inicia un ciclo desde el nÚmero 2, siendo que en la primeta iteraciÃģn tendremos:
fib[i] = fib[i-1] + fib[i-2];
Donde i = 2, i-1 =1 e i-2 =0
Recuerda que los elementos en un array se indexan desde el cero.
Si se lo hace con recursividad es para evitar el uso de for, no alrevez.
ÂŋCuÃĄl es ese tema que usas en VS?
ÂŋQuÃĐ extensiÃģn de VSCode o que IDE utilizas para ejecutar el cÃģdigo JS asÃ? ÂŋO eso es con Node.js?
Programacion dinamica o no?
function fib(n){
Q = sqrt(5)
A = ((1+Q)/2)^n
B = ((1-Q)/2)^n
return (A-B)/Q
}
No se quien aprenderÃa programaciÃģn recursiva antes de bucles bÃĄsicos
lo de que al poner >= se te cree el icono unificado, es con algÚn plugin de vscode? en ese caso podrÃas decir cuÃĄl es?
PD: muy buen vÃdeo y al grano
Gracias
EstÃĄ soluciÃģn es de tipo bo
Bottom-up. Gracias por el aporte
Este es el primer ejercicio que realice en un bootcamp cuando toco ver recursion
En q ÃĄrea de la programaciÃģn necesitas recursiÃģn? En frontend??
Se q existe una programaciÃģn llamada funcional y ahà si q se ve recursiÃģn pero en desarrollo web se ve tambiÃĐn??
SoyHenry? xd
@@martinaruni6152 la verdad me estoy adentrando en la programacion y solo lo utilice en ejercicios matematicos o para recorrer objetos, arboles binarios y demas
@@adalobregon6792 exactamente jajaja
@@santiagoavalos3637 yo estoy cursando el M2 xd
No se puede hacer con reduce?
En quÃĐ empresas hacen pruebas tan sencillas?
estoy aprendiendo javascript y para practicar proponen ejercicios como esos, imprimir primos, pares, fiobonacci, y como nunca puse atencion a matematicas en el colegio me cuestan mucho. ademas que tampoco le veo relacion con los programas que usamos. Mi pregunta es developers? estas cosas al final se usan en el front end o en el back end? Deveria empezar a estudiar matematicas a la vez que estudio programacion?
MÃĄs allÃĄ de las entrevistas (porque ponen a prueba tu creatividad y capacidad de resoluciÃģn de problemas), dudo mucho que en algÚn momento vayas a requerir ese tipo de lÃģgica matemÃĄtica. Aunque si te recomendarÃa matemÃĄticas discretas.
Un saludo David, bueno es una pregunta que creo que todos nos hicimos cuando entramos en este mundo, y lo que te puedo decir es que estuve en esa misma posiciÃģn de preguntar para que diablos iba a servir, a fin de cuentas en el entorno laboral no te van a pedir que rotes nÚmeros, que los descompongas, etc, PERO lo importante es, que cÃģmo en todo tu no puedes correr sin haber aprendido a caminar, estos ejercicios por lo general alimentan tu lÃģgica de programaciÃģn, y en un entorno laboral si te vas a encontrar con muchos problemas entonces debes darle la soluciÃģn, como? Con tu lÃģgica esa que con estos ejercicios desarrollas, si pules y prÃĄcticas mucho tu lÃģgica, vas a ir a cualquier parte y en cualquier lenguaje a proponer la soluciÃģn, por quÃĐ lo que cambia es el lenguaje no la lÃģgica
Si vas a inclinarte por Machine Learning y Data Science, sÃ, toda la matemÃĄticas que puedas aprender la vas a necesitar. QuizÃĄs en desarrollo web no se necesite un nivel de matemÃĄticas alto (y depende tambiÃĐn jeje), pero estÃĄ bien tener un nivel medio en matemÃĄticas (algoritmos por ejemplo) para el tema de desarrollar tu anÃĄlisis, lÃģgica y resoluciÃģn de problemas.
Todo mÃĐtodo recursivo tiene una representaciÃģn iterativa... En lo particular fibo me gusta recursivo. Pero hay muchos casos donde prefiero usar mÃĐtodos iterativos xD
Pero por ejemplo para hacer DFS en un ÃĄrbol binario la recursividad es el santo grial hahaha
Yo una de las primeras cosas que hice cundo estaba aprendiendo javascript fue una funciÃģn que te imprima la cantidad de nÚmeros de fibonacci que le digas y solo habÃa estudiado 1 mes , no creo que saber hacer eso te capacite para un puesto de trabajo
Que sea una pregunta de entrevista no significa que saber hacerla directamente te capacite para nada.
buen video
SÃ, es programaciÃģn dinÃĄmica
No, no lo es
Que tema de vs code usas ?
Javascript agrega elementos automÃĄticamente en caso de superar el rango de elementos en un array?
Si es constante no deberÃa ser que no la puedes cambiar? Por que es JS tan mierda?
Cual es esa fuente que usa?
Eso si, ocupando memoria como un descosido. A mi un programador me hace esta funciÃģn y se la tiro x la cabeza. DespuÃĐs nos preguntamos porque chrome se come la mitad de memoria del equipo... ðĪĶ
Con recursividad es lo mismo en aspecto de memoria. Incluso dirÃa que quizÃĄ aÚn mÃĄs
Muy bueno
ReprobÃĐ la entrevista con esta soluciÃģn lol
si te pidieron que lo resuelvas con recursividad... puede ser, igual no creo que solamente hacer un ejercicio te haga aprobar o reprobar la entrevista.
Para q rama de la programaciÃģn se ve recursividad?? frontend?
@@martinaruni6152 creo que es algo que te puede servir en gral independientemente de si haces back o front. Ojo es mi opinion y puede no ser la correcta jajaj
@@snk263 es q vi varios videos de este tipo de ejercicios , y todos son para una entrevista tecnica de backend
@@martinaruni6152 El paradigma de programaciÃģn funcional usa mucho la recursividad y estÃĄ muy relacionada con "backend" para hacer tareas de paralelizacion (Ejecutar cÃģdigo en mÃĄs de un nucleo de una CPU).
CuÃĄl es el tema? :(
Bueno, la cosa es que te pongan este problema por ejemplo en java, y sin recursividad son el doble de lineas
Capo.
Yo:
Printf("1,1,2,3,5,8,13......");
Hola , me dirÃas el nombre del tema y la font? Muchas gracias
Si no estoy mal es
Synthwave 84(tema)
Cascada(font)
@@gory1356 muchas gracias
que libreria se usa en este caso?
ninguna
Yo me sÃĐ una mejor
npm install fibonacci
la gente usa recursividad para hacer fibonaci?!!!! que escandalo ðĪĢ esa compu va explotar ðĢðĨ
Hermoso, pero en programaciÃģn esta mal aplicado.... lo aplicas mal vos o Fibonacci?
Te reto a una charla al respecto.
Me rebotaron por no usar recursividad
@midudev que tipo de fuente usas en ese video?.
oh, pues nunca supe de esto de fibonacci ð
Que clase de profesor tuviste no quiero ni imaginarme
@@Moni_caga_lind000 ðĪ·ðŧââïļ pero mejor saberlo ahora que nunca!
Desde el punto de vista de la performance eso tambiÃĐn estÃĄ mal. Primero que no estÃĄ usando la memoization por lo cual tampoco es un enfoque basado en programaciÃģn dinÃĄmica. De echo la mejor forma de hacer fibonnaci es usando generadores ya que estos pueden pausar su ejecuciÃģn y retener valores en las funciones. Asà se puede llegar a calcular nÚmeros muchos mÃĄs altos de fibonnaci sin tener que recalcularlos.
Desde cuÃĄndo el 0 es un tÃĐrmino de fibonacci?
La sucesiÃģn de Fibonacci, de toda la vida, empieza con el 0 y el 1.
@@midudev La sucesiÃģn de fibonacci es doblar el nÚmero, el doble de 0 no es 1
Yo hacia en la uni eso pensando que era normal y que todos lo hacian :v
Es lo normal y todos lo hacemos :v
genial, pero hazlo un poco mas rapido porfa
Recursividad 2.0
Queda bonito aunque es horrible en memoria xD
Funcionaria igual para F(1)? Porque segÚn la funciÃģn te saldrÃa igual a 0 cuando verdaderamente es 1
cÃģmo que darÃa 0? fib[1[ = 1
En quÃĐ IDE lo escribe ?
Run js
AdemÃĄs esta forma es muchÃsimo mÃĄs correcta que la recursividad que es de orden exponencial sino me equivoco mientras que estÃĄ es lineal, este mÃĐtodo de hacer fibonacci se suele dar en la introduccion de programaciÃģn dinÃĄmica por si a alguno le interesa el tema
TambiÃĐn tiene su fÃģrmula XD usando el nÚmero aureo
Yo lo hacÃa asà siempre ðđðđ
Por lo generÃĄl la recursividad es mÃĄs eficiente. Aparte, fibonachi y cualquier expreciÃģn matemÃĄtica, es mejor resolverla por la propia fÃģrmula matemÃĄtica que realizar otras implementaciones.
El chiste es entenderlo
, de que sirve copiarlo si luego en el trabajo vendran cosas mÃĄs difÃciles
No se trata de que sea necesario o no. El punto es saber usar recursividad.
Que signfica recursividad?
Una forma de atajar y resolver problemas bÃĄsicamente usar una funciÃģn y que se llame asà misma
Que significa recursividad?
Lol, yo siempre lo hize asi
Mucha gente utiliza el operador * para multiplicar a por b. Sin embargo, se puede hacer utilizando un for para sumar a veces b. Madre mia...
Creo que pones este comentario porque realmente no entiendes la diferencia entre usar recursividad y usar el for. Te sugiero que lo estudies para no dejar comentarios que te puedan dejar en evidencia. :)
@@midudev Creo que sugerir a alguien que estudie porque no ha entendido, para luego no argumentar nada, te deja en evidencia a ti.
Pero, por si no ha quedado claro con la ironÃa de mi comentario anterior, yo sostengo que: para este caso concreto de la sucesiÃģn de Fibonacci, la diferencia entre usar recursividad o iteraciÃģn, se reduce a una cuestiÃģn de elegancia, ganando por mucho el primer mÃĐtodo. Ya que la diferencia en tiempo de computaciÃģn o uso de memoria, que es en lo que creo que podrÃa ganar el segundo, es simplemente ridÃcula.
Y ahora, si me quieres responder, me argumentas. :)
De hecho es mÃĄs eficiente utilizar el for, ya que la recursividad en este ejercicio utiliza mucha memoria
todo lo contrario amigo, la complejidad algoritmica del for es lineal y la recursiva por lo general logarÃtmica
@@mathiastejerina1803 tal vez estoy mal pero si haces la prueba veras que el for puede resolver el problema con cantidades mÃĄs grandes y la recursividad no llega a tanto la compu se traba ð . Es mi humilde opiniÃģn pero yo hice la prueba y el for fue mÃĄs eficiente.
Y la MemoizaciÃģn?
CÃģmo me guardo esto?
Pero no tiene sentido, cÃģmo es posible que funcione correctamente con 0 o 1? Ambos son menores a 2 y el for serÃa eterno
Me pueden ayudar en algo con mi tarea
Eh, ehh, eso lo hice hace poco :O, solo que retorno el array pues solicitaban pintar en pantalla los n terminos
Oye pero pues si estÃĄs usando recursividad, la serie misma lo es , es absurdo decir "sin usar recursividad"
Ey Ey MÃĄs despacio cerebrito
eee pero estÃĄs declarando que el tamaÃąo del array es de 2 posiciones y despues lo aumentas
no es que no es necesario hacerlo con recursividad,sino que no es para nada eficiente hacerlo recursivo
IncreÃblemente esto tendrÃa que ser al revÃĐs, generalmente se pide recursividad y no uso de arrays
Usar la recursividad es interesante para aprenderla, pero no es la mejor opciÃģn...
Yo prefiero el metodo de mi profesor Aoae Ie Ueaoe
Solo publicas el ultimo numero
Ahà tienes un ejercicio. Ya que estÃĄ el array, publica todos los nÚmeros. ;)
Pero eso ss recursivo tambiÃĐn...
Ahh ok. Y si no sabes fibonacci? Lo mejor serÃa ser sincero y decir âno sÃĐ quÃĐ es eso, pero si me lo explica lo puedo programar de inmediatoâ.
A crear otra sepa se a dicho
Lo entiendo y a la vez no... mi conflicto estÃĄ en que la variable fib es una constante, por lo tanto desde mi entendimiento no deberÃa poder cambiar su valor en el for o esto es algo que javascript permite?
es un array
no consigo entenderlo... si sacaras este tema en otro video mÃĄs extendido serÃa genial... veo todos tus videos.
ya lo he entendido... he aprendido muchisimo con tu video... gracias... eres un fenÃģmeno... (acuerdate de vez en cuando de los que estamos empezando) un saludo.
Para entender los ejercicios debes ir paso x paso justamente cuando lees un cÃģdigo que no es tuyo para entenderlo
Creo que tambiÃĐn podrÃas hacer un contador aunque la recursiva queda bonita
La recursividad es hermosa, hasta que desbordas la pila de llamadas.
jajajaj ya ves
tiene otro video donde dice que no usa el for, y aqui si lo usa:v
Llamen a la policÃa!!!
Lo voy a explicar para que Jose y todo el mundo lo entienda. Siempre favorezco usar forEach para iterar arrays. Pero en esta soluciÃģn el array se tiene que crear en base a un nÚmero y no tiene sentido crear el array de n posiciones antes. ð
Me sirvio para acortar 3 lineas de mi codigo y por sierto buena logica sea tuya o del q te haigas copiado
Lo loco de eso es que no garantiza nada !