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

79
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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