Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

394
Visualizações
¿Cómo puedo cambiar y mantener el valor de una variable dentro de una función recursiva sin pasarla como parámetro?
function newtonRaphson(x, count){ while(count > 0){ var previousValue = 0 if(previousValue === 0){ previousValue = x/2 } var y = (previousValue + (x/previousValue))/2 previousValue = y console.log(previousValue, count) return newtonRaphson(x, count - 1) } return y }

Tengo esta función que se supone que realiza el método de Newton Raphson, se vería así:

  • X = 20
  • cuenta = 4
  • valoranterior(0) = 10
  • y(1) = (10 + (20/10))/2 = 6
  • valor anterior = 6
  • y(2) = (6 + (20/6))/2 = 4,666
  • valoranterior = 4.666
  • y(3) = (4,666 + (20/4,666))/2 = 4,476
  • valoranterior = 4.476
  • y(4) = (4,476+ (20/4,476))/2 = 4,472

Mi pregunta es, ¿hay alguna manera de mantener el valor anterior entre iteraciones sin pasarlo a la función? Porque x debe pasarse sin importar qué, además de contar, pero también necesito decirle a la función cuál es el valor anterior, así que estoy perdido

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Este código está confuso.

En primer lugar, si bien se llama newtonRaphson , parece ser solo para un caso muy específico del método de Newton-Raphson , el de encontrar raíces cuadradas usando el método de Babilonia . Así que idealmente debería tener un mejor nombre.

Intenta resolver el problema simultáneamente de forma recursiva y con un bucle while . Tenemos que elegir uno u otro. Aquí elegimos una versión recursiva.

Luego notamos que estas líneas no tienen ningún sentido real:

 var previousValue = 0 if(previousValue === 0){ previousValue = x/2 }

Esta es una forma ridículamente indirecta de escribir.

 var previousValue = x/2

Pregunta sobre hacer esto sin pasar el valor anterior a la función recursiva. Podrías, simplemente rastreándolo en un alcance superior. (¡Por favor, por favor, no el alcance global!) Podría verse así:

 const sqrt = (x, count) => { let prev = x / 2 const _sqrt = (count) => { if (count <= 0) return prev prev = (prev + (x / prev)) / 2 return _sqrt (count - 1) } return _sqrt (count) } console .log (sqrt (25, 1)) //=> 7.25 console .log (sqrt (25, 2)) //=> 5.349137931034482 console .log (sqrt (25, 3)) //=> 5.011394106532552 console .log (sqrt (25, 4)) //=> 5.000012953048684 console .log (sqrt (25, 5)) //=> 5.000000000016778 console .log (sqrt (25, 6)) //=> 5

Pero no recomendaría esto en absoluto. La recursividad es más simple cuando pasa las variables necesarias a la función. Y esto no es difícil de hacer, ya sea con un parámetro predeterminado, como este:

 const sqrt = (x, count, prev = x / 2) => count <= 0 ? prev : sqrt (x, count - 1, (prev + (x / prev)) / 2)

o con un envoltorio público alrededor de una función auxiliar recursiva interna, como esta:

 const _sqrt = (x, count, prev) => count <= 0 ? prev : _sqrt (x, count - 1, (prev + (x / prev)) / 2) const sqrt = (x, count) => _sqrt (x, count, x / 2)

De los dos, normalmente prefiero el parámetro predeterminado, pero hay algunos problemas potenciales con ellos, especialmente si no tiene el control de cómo se llama a su función. Entonces la división público/interno tiene sentido.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda