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

82
Vistas
Función recursiva - Javascript - suma de elementos de matriz igual a n

Estoy trabajando en el curso de javascript en freecodecamp y estoy confundido con la lección sobre funciones recursivas.

Tengo dificultad para entender el siguiente código:

 function sum(arr, n) { if(n<=0) { return 0; } else { return sum(arr, n-1) + arr[n-1]; } } sum([10,20,30,40], 3);

La parte específica con la que estoy luchando es esta:

  • arreglo[n-1];

¿La línea de retorno no devolvería sum([10,20,30,40], 3-1) + arr[3-1] dando como resultado 30+30 = 60?

Cualquier ayuda con esto sería muy apreciada. O incluso señalándome en la dirección correcta para investigar esto más a fondo.

Gracias

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

0

Escribamos el código original de una forma más intuitiva poniendo arr[n-1] primero. De esta forma podemos seguir expandiendo cada llamada a sum() hacia la derecha.

Pero primero anotemos qué llamada sum(arr, n) devolverá para cada n

 if n > 0 => arr[n-1] + sum(arr, n-1) if n == 0 => 0 n == 3 => arr[2] + sum(arr, 2) n == 2 => arr[1] + sum(arr, 1) n == 1 => arr[0] + sum(arr, 0) n == 0 => 0

Ahora ampliamos nuestros pasos:

 sum(arr, 3) == arr[2] + sum(arr, 2) // expand sum(arr,2) where n = 2 == arr[2] + arr[1] + sum(arr, 1) // expand sum(arr,1) == arr[2] + arr[1] + arr[0] + sum(arr,0) // expand sum(arr,0) == arr[2] + arr[1] + arr[0] + 0 == 30 + 20 + 10 + 0
about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba con

 function sum(arr, n) { console.log(`calling sum(arr, ${n})`); if(n<=0) { console.log(`returning 0`); return 0; } else { console.log(`calculating [sum(arr, ${n-1}) + ${arr[n-1]}]`); let s = sum(arr, n-1);; console.log(`returning [sum(arr, ${n-1}) + ${arr[n-1]}] = [${s} + ${arr[n-1]}]`); return s + arr[n-1]; } } sum([10,20,30,40], 3);

La salida será:

llamando suma (arr, 3)

calculando [suma(arr, 2) + 30]

llamando suma (arr, 2)

calculando [suma(arr, 1) + 20]

llamando suma (arr, 1)

calculando [suma(arr, 0) + 10]

llamando suma (arr, 0)

regresando 0

devolviendo [suma(arr, 0) + 10] = [0 + 10]

devolviendo [suma(arr, 1) + 20] = [10 + 20]

devolviendo [suma(arr, 2) + 30] = [30 + 30]

Otros dos ejemplos clásicos de funciones recursivas simples son factorial y fibonacci, porque esas dos fórmulas en sí mismas son recursivas. La multiplicación también podría calcularse recursivamente, si piensa que a * b es a + (a + ...) donde a se suma b veces.

Si está tratando de codificar esas funciones, hay una sugerencia para codificar este último ejemplo:

5 * 10 es igual a 5 + 5 * 9, que es igual a 5 + 5 + 5 * 8 y así sucesivamente.

about 4 years ago · Juan Pablo Isaza Denunciar

0

sum([10,20,30,40], 3-1) Volverá a llamar a la función sum, piénsalo.

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