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

163
Vistas
Función idéntica conduce a diferentes resultados en diferentes idiomas

Escribí una función en javascript que se supone que devuelve el número primo más bajo mayor que x. En cambio, queda atrapado en una recursividad indefinida.

 function next_prime(x) { if (x <= 1) { return 2; } y = 2; z = x + 1; while(true) { if (z % y == 0) { z++; y = 2; continue; } if(y * y > z) { return z; } y = next_prime(y); } }

No entendí qué estaba mal, así que implementé la misma función en python, donde funcionó bien.

 def next_prime(x): if x <= 1: return 2 y = 2 z = x + 1 while True: if z % y == 0: z += 1 y = 2 continue if y * y > z: return z y = next_prime(y)

Revisé ambas funciones y estoy seguro de que son idénticas, pero en python funciona y en javascript no.

Aunque se agradece, no necesariamente estoy buscando ayuda con este problema específico, estoy más interesado en lo que realmente está sucediendo aquí.

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

0

Creo que el problema es que no estás declarando tus variables correctamente. En JavaScript, debe usar las palabras clave let y const , que significan variables reasignables y no reasignables, al declarar una nueva variable. Cuando se usan las líneas let in cinco y seis, la función funciona bien.

about 4 years ago · Santiago Trujillo Denunciar

0

Debe usar el modo estricto para evitar este error común de los principiantes de javascript.

su código js real con 'uso estricto'; se rechaza :

 'use strict'; console.log( next_prime(7) ) // never run on strict mode, otherwise make an infinite loop function next_prime(x) { if (x <= 1) { return 2; } y = 2; z = x + 1; while(true) { if (z % y == 0) { z++; y = 2; continue; } if(y * y > z) { return z; } y = next_prime(y); } }

mismo código en la sintaxis javascript correcta:

 'use strict'; console.log( next_prime(7) ) // -> 11 function next_prime(x) { if (x <= 1) return 2 ; let y = 2, z = x + 1 // declare y and z as locale ; while(true) { if (z % y == 0) { z++; y = 2; continue; } if (y**2 > z) return z ; y = next_prime(y); } }

explicación: su código es recursivo, la llamada interna cambiará el valor de y y z en las llamadas principales y hará un ciclo infinito

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