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

189
Vistas
¿Por qué no puedo devolver el valor de la función recursiva?

Estoy resolviendo la tarea mini-max en hackerrank.

https://www.hackerrank.com/challenges/mini-max-sum/problem?isFullScreen=true

Para eso, tengo el siguiente código donde uso la recursividad hasta que llego a la longitud de la matriz

 let arr = [1,2,3,4,5]; let sumsArr = []; function sumMiniMax(arr, length) { let sum = 0; for(let i = 0;i < arr.length;i++) { if(i != length) { sum += arr[i]; } } sumsArr.push(sum); length = length + 1; if(length == arr.length) { let result = findMinAndMax(sumsArr); console.log('result local', result); return result } else { sumMiniMax(arr, length) } } function findMinAndMax(sumsArr) { return Math.min(...sumsArr) + '\n' + Math.max(...sumsArr) } let res = sumMiniMax(arr, 0); console.log('res', res);

en el resultado local, obtengo los resultados esperados 10 and 14 pero después de que se realiza la recursión, quiero devolver el resultado de findMinAndMax a la persona que llama original, que es sumMiniMax

En ese caso, obtengo solo indefinido, pero antes de devolver el valor, podemos ver que la salida correcta en el ámbito local se encuentra en 10 and 14 . Porqué es eso ?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

No todas las rutas de código devuelven un valor. Debe propagar su resultado en la pila de llamadas. en tu caso el

 return sumMiniMax(arr, length);

falta en la rama else de su función sumMiniMax() .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que la recursividad en este caso es una especie de exceso de ingeniería. La tarea tiene un enfoque sencillo:

 function miniMaxSum(arr) { const sumWithout = (el) => { const elIndex = arr.indexOf(el); const arrWithout = arr.filter((_, i) => i !== elIndex); return arrWithout.reduce((sum, num) => sum + num); }; const maxEl = Math.max(...arr); const minEl = Math.min(...arr); console.log(sumWithout(maxEl), sumWithout(minEl)); }; miniMaxSum([1,2,3,4,5]);
 .as-console-wrapper{min-height: 100%!important; top: 0}

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede adoptar un enfoque de bucle único al tener una suma de los tres valores no mínimos y no máximos y mantener el valor mínimo y máximo para agregarlos más tarde.

 function getMinMax(array) { let min = array[0] < array[1] ? array[0] : array[1], max = array[0] > array[1] ? array[0] : array[1], sum = 0; for (let i = 2; i < array.length; i++) { const value = array[i]; if (min > value) { sum += min; min = value; continue; } if (max < value) { sum += max; max = value; continue; } sum += value; } return [min + sum, max + sum].join(' '); } console.log(getMinMax([1, 2, 3, 4, 5]));

about 4 years ago · Juan Pablo Isaza 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