Estoy tratando de resolver este problema de leletcode . En este problema, básicamente necesito devolver la potencia de x.
Pero cuando ejecuto mi solución, devuelve este mensaje de error:
RangeError: Maximum call stack size exceededMi código:
function myPow(base, exponent){ if(exponent === 0) { return 1; } else if(exponent < 0){ return (myPow(base,exponent + 1)/base); } else { return base * myPow(base,exponent-1); } } myPow(0.00001, 2147483647) // this test case is failing only I thinkCódigo actualizado según la sugerencia de Luca Kiebel
function myPow(base, exponent){ if(exponent === 0) { return 1; } else if(exponent < 0){ return (myPow(base,exponent + 1)/base); } else { return base ** myPow(base,exponent-1); } }Alguien por favor explíqueme dónde estoy cometiendo un error.
Está llamando a la función dentro de sí misma demasiadas veces, lo que hace que el motor JS piense que hay un problema y lo elimina antes de que consuma demasiada CPU/RAM.
Usar Math.pow o un bucle for simple (en lugar de recursividad) debería solucionar el problema.
Consulte el límite de tamaño de la pila de Javascript del navegador para saber cuántas veces puede llamar a una función dentro de otra
Básicamente, obtiene ese error porque su función se llama a sí misma varias veces, hasta que se alcanza un límite de pila.
Puede intentar usar la función Math.pow() para lograr lo que está tratando de hacer.
La recursividad no es una buena opción si desea ejecutar su propia función de aumento a la potencia, pero puede hacerlo en un ciclo muy simple
function myPow(x,n){ var res = 1; for(var i=0;i<Math.abs(n);i++) res = n<0 ? res/x : res * x return res } console.log(myPow(2, 10), Math.pow(2,10), 2 ** 10) console.log(myPow(2, -2), Math.pow(2,-2), 2 ** -2) //console.log(myPow(0.00001, 2147483647), Math.pow(0.00001,2147483647), 0.00001 ** 2147483647) Pero como puede ver en los ejemplos anteriores, simplemente está reinventando el cuando de Math.pow o el operador **