Summing It Up es-419 Explainer

Explicador de Resumiéndolo

Objetivo de este acertijo: Usar una función que se llame a sí misma recursivamente.
Tutorial de la solución: La función sumUpTo() toma un número como un argumento y devuelve la suma de cada número hasta ese número. Por ejemplo, sumUpTo(5) devolverá 15, como 5 + 4 + 3 + 2 + 1 = 15.

Para completar el acertijo, cambia el bloque de código dentro de la else statement de return number + sumUpTo(number) a return number + sumUpTo(number - 1).

Veamos dentro de la función para ver cómo funciona.

Dentro de la función hay una if…else statement. La if statement analiza si el número que pasó a la función es menor que o igual a 1. Si esto es verdadero, la función devolverá 1. Sin embargo, si el número es mayor que 1, se ejecutará el código en el bloque else.

Dentro del bloque else es donde las cosas se ponen algo difíciles. La función tomará el número y lo sumará nuevamente al resultado de la llamada a la función, esta vez con number - 1 como un argumento.

Esto tendrá sentido si seguimos un número por la función. Intenta llamar a la función con 3 como un argumento: sumUpTo(3):

La if statement verificará si el 3 es menor que o igual a 1. Dado que 3 es mayor que 1, se ejecutará el código en el bloque else. Esto devolverá 3 + sumUpTo(3-1), llamando nuevamente a la función con 2 como el argumento del número.

Ahora nuestra ecuación es 3 + sumUpTo(2)

La if statement verificará el número nuevamente para ver si 2 es menor que o igual a 1. Esto sigue siendo falso, de modo que se ejecutará el bloque else; esta vez devolverá 2 + sumUpTo(2-1) y llamará a la función nuevamente con 1 como el argumento de número.

Ahora nuestra ecuación es 3 + 2 + sumUp(1)

Cuando la función se ejecuta nuevamente con 1 como el número, el bloque de código de la if statement se ejecutará porque 1 es menor que o igual a 1. Este bloque de código simplemente devuelve el número, y la función puede dejar de llamarse a sí misma. Esto es importante, ya que llamar a una función recursivamente sin una condición que detenga a la función hará que la recursividad sea interminable, y no causará que un programa se bloquee. sumUpTo(1) devuelve 1, y detiene la función.

Ahora nuestra ecuación es 3 + 2 + 1, que es igual a 6.

Solución del código de ejemplo:

function sumUpTo(number) {
    if (number <= 1) {
        return number;
    } else {
        return number + sumUpTo(number - 1);
    }
}

console.log(sumUpTo(4));

Conceptos de JavaScript: recursividad, funciones, flujo de control, if…else, console.log()

1 Like