Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!