In the Mail es-419 Explainer

Explicador de Por correo

Objetivo de este acertijo: Completar la función sendPostcards recursiva.

Tutorial de la solución: En este acertijo usarás una función recursiva.

Una función recursiva es una función que se llama a sí misma y hace que la función se ejecute nuevamente. Esto hace que la función trabaje como un ciclo, ya que le indica a la computadora que ejecute el mismo bloque de código una y otra vez. La función seguirá llamándose hasta que se cumpla una condición de término. Sin esta condición de término, la función no dejará de ejecutarse.

La definición de la función sendPostcards no es correcta. Solo envía 1 postal. Debemos hacer que la función envíe todas las postales usando recursión.

Dentro de la función, una if statement verifica si amount es 1. Esto es lo mismo que preguntar si es necesario enviar 1 sola postal. Si solo es necesario enviar 1 postal, entonces debemos imprimir solo 'All postcards sent' y devolver amount.

Si amount no es 1, se debe enviar más de 1 postal y se ejecutará el bloque else. Creará una nueva variable llamada amountRemaining, que es solo 1 menos que amount. Pero, ¿cómo enviamos postales amountRemaining? Bueno, podríamos simplemente llamar de nuevo a la función sendPostcards, ¡pero esta vez con amountRemaining!

La parte importante es que cada vez que se llama a la función sendPostcards, hay verificación de inmediato para ver si solo se debe enviar 1 postal. El envío de 1 postal es la condición de término que evita que la función se ejecute por siempre.

Solución del código de ejemplo:

(Pulsa a continuación para revelar)

function sendPostcards(amount) {
    console.log('Postcard ' + amount + ' sent!');
    if (amount === 1) {
        console.log('All postcards sent.');
        return amount;
    } else {
        let amountRemaining = amount - 1;
        console.log('Calling function again.');
        return sendPostcards(amountRemaining);
    }
}

sendPostcards(3);

Conceptos de JavaScript: bloque de código (función, if statement), console.log() , recursividad, return, variables