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

159
Visualizações
pregunta sobre el valor máximo en una matriz con recursividad en JavaScript

Actualmente, pude obtener la siguiente función para recuperar el valor máximo de una matriz a través de la recursividad

 const max = ([a,...rest]) => !rest.length || a > max(rest) ? a : max(rest); console.log(max([-3,3,19,61,99,22,55])); // 99 console.log(max([32,0,9,87,73])); // 87 console.log(max([1,6,8])); // 8

Sin embargo, cuando trato de refactorizarlo con un parámetro adicional "b" a través de la desestructuración, toda la función ya no funcionará correctamente.

 const max = ([a,b,...rest]) => !rest.length || a > b ? a : max([b,...rest]); console.log(max([-3,3,19,61,99,22,55])); // 99 console.log(max([32,0,9,87,73])); // 32 console.log(max([1,6,8])); // 6

¿Puede alguien amablemente explicarme lo que estoy haciendo mal o indicarme la dirección correcta? Soy nuevo en recursividad y programación, por lo que cualquier ayuda será muy apreciada :)

ACTUALIZAR:

Me tomó un tiempo resolverlo, pero aquí está la solución recursiva con desestructuración:

 const max = ([a,b,...rest]) => !rest.length && !b ? a : max([b < a ? a : b,...rest]);
  1. si la longitud de "descanso" es igual a "0" y "b" no existe, devuelva "a"

!rest.longitud && !b ? a

  1. de lo contrario, invoque "max" recursivamente

: max([b < a ? a : b,...descanso]);

  • para el primer argumento, si "b es menor que "a", devuelve "a"; de lo contrario, devuelve "b"
  • para el segundo argumento, simplemente "extenderemos" en "descanso"
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Tiene toda la razón al querer arreglar la versión recursiva inicial. llamar al max (rest) dos veces y hacerlo recursivamente para cada lista más pequeña significa que está llamando al max 2 n veces, donde n es la longitud de la entrada. (Es más complejo que eso, variando si n es par o impar, pero aun así crece a ese ritmo).

Así que necesitas arreglar esto. Pero su intento tiene varias fallas fatales, como ya se informó en los comentarios. En primer lugar, es muy posible que esté desestructurando más argumentos que elementos tiene su lista. (¿Cuál sería b en max ([42]) ?) En segundo lugar, cuando llegas a dos elementos ( !rest .length ), siempre devuelves el primero. ¿Y si el segundo es más grande?

Mi enfoque probablemente sería agregar una función auxiliar que tome un máximo de dos elementos y luego usarla para escribir la función principal. Podría verse así:

 const max2 = (a, b) => a > b ? a : b const max = ([a, ...rest]) => rest .length == 0 ? a : max2 (a, max (rest)) console.log (max ([-3, 3, 19, 61, 99, 22, 55])); // 99 console.log (max ([32, 0, 9, 87, 73])); // 87 console.log (max ([1, 6, 8])); // 8

Por supuesto, en lugar de una función auxiliar, siempre podríamos usar Math .max , pero eso huele a trampa.

Si tiene una fuerte aversión a las funciones auxiliares, puede usar un parámetro predeterminado en su lugar. Pero creo que este código es más complicado y no muy útil:

 const max = ([a, ...rest], b = rest.length ? max (rest) : -Infinity) => rest .length == 0 ? a : a > b ? a : b

Aquí usamos -Infinity para un valor garantizado que no sea mayor que cualquier otro valor. Eso también podría ser útil en la versión de fragmentos. En este momento, si pasa max una matriz vacía, devuelve undefined . Si quisiéramos que devolviera -Infinity en su lugar, entonces podríamos predeterminar a -Infinity :

 const max = ([a = -Infinity, ...rest], b = rest.length ? max (rest) : -Infinity) => rest .length == 0 ? a : a > b ? a : b max ([]) //=> -Infinity
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