Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

268
Vistas
Recibo RangeError: el tamaño máximo de la pila de llamadas excedió el error en Javascript

Estoy tratando de resolver un problema de leetcode a través de la recursividad, pero recibo un error que dice RangeError: Maximum call stack size exceeded tal vez esté haciendo algo mal.

Problema:

Escribe un algoritmo para determinar si un número n es feliz.

Un número feliz es un número definido por el siguiente proceso:

Comenzando con cualquier entero positivo, reemplaza el número por la suma de los cuadrados de sus dígitos.

Repita el proceso hasta que el número sea igual a 1 (donde permanecerá), o se repite sin cesar en un ciclo que no incluye 1. Aquellos números para los que este proceso termina en 1 son felices.

Devuelve verdadero si n es un número feliz y false si no lo es.

 Example 1: Input: n = 19 Output: true Explanation: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 Example 2: Input: n = 2 Output: false

Mi código:

 var isHappy = function(n) { if(n.length<2) return false var fn=(n)=>{ let i=0; let sum=0; while(i<n.length){ sum=sum+Math.pow(n[n.length-1-i],2); i++; } while(sum!==1){ //console.log(sum) fn(sum); } if(sum === 1) return true } fn(n) };

PD: No necesito una solución para este problema. Quiero saber por qué mi código no funciona y qué estoy haciendo mal. Y, que cambios debo hacer para que funcione bien.

Enlace al problema anterior.

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Maximum call stack size exceeded

Este error ocurre cuando las funciones llaman a otras funciones demasiadas veces. En este caso, su función se llama a sí misma recursivamente sin fin, en caso de que el número sea "infeliz".

Considere agregar a su función algo que le permita saber si el proceso se repite sin cesar.

Considere usar argumentos/matrices para almacenar los números que ya han aparecido.

about 4 years ago · Santiago Trujillo Denunciar

0

Como usted mismo escribió, "Repita el proceso hasta que el número sea igual a 1 (donde permanecerá), o se repite sin cesar en un ciclo" .

En su implementación, fn se llama a sí mismo infinitamente. En el proceso, la máquina virtual javascript crea un contexto de función en la memoria en cada iteración. Esto se puede hacer hasta un momento determinado, después de lo cual aparece el error Maximum call stack size exceeded .

¿Que estoy haciendo mal?

Devuelve verdadero cuando encuentra un número feliz, pero nunca devuelve falso de lo contrario. Agregue una condición para detectar números infelices (detectar un ciclo) y devuelva falso en ese caso.

Editar: aquí hay una implementación de ejemplo:

 var isHappy = function(n) { if(n.length<2) return false // placeholder to store already called values const calledValues= new Set() var fn=(n)=>{ let i=0; let sum=0; if (calledValues.has(n)) // cycle detected! return false; calledValues.add(n); while(i<n.length){ sum=sum+Math.pow(n[n.length-1-i],2); i++; } if (sum !== 1) return fn(sum.toString()); else // sum === 1, number is happy! return true } // make sure to pass a string to fn return fn(n.toString()); }; (new Array(20)).fill().map((_,i)=>10+i) .forEach(n=> console.log(n, "is happy?", isHappy(n)));

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda