Summing It Up pt-br Explainer

Explicação de Resumindo

Objetivo do desafio: Usar uma função que se autodenomina recursivamente.

Passo a passo da solução: A função sumUpTo() usa um número como argumento e retorna a soma de cada número até esse número. Por exemplo, sumUpTo(5) retornará 15, como 5 + 4 + 3 + 2 + 1 = 15.

Para concluir o desafio, mude o bloco de código dentro da else statement de return number + sumUpTo(number) para return number + sumUpTo(number - 1).

Vamos dar uma olhada dentro da função para ver como ela funciona.

Dentro da função existe uma if…else statement. A if statement testa se o número passado para a função é menor ou igual a 1. Se isso for verdade, a função retornará 1. Entretanto, se o número for maior que 1, o código no bloco else será executado.

Dentro do bloco else as coisas ficam um pouco complicadas. A função tomará o número e o adicionará ao resultado de chamar a função novamente, desta vez com number - 1 como argumento.

Isso fará mais sentido se seguirmos um número através da função. Vamos experimentar chamar a função com 3 como argumento: sumUpTo(3):

A if statement verifica se 3 é menor ou igual a 1. Como 3 é maior que 1, o código no bloco else será executado em seu lugar. Isso retornará 3 + sumUpTo(3-1), chamando a função novamente com 2 como o argumento do número.

Nossa equação agora é 3 + sumUpTo(2)

A if statement verificará novamente se 2 é menor ou igual a 1. Isso ainda é falso, por isso o bloco else será executado novamente, desta vez retornando 2 + sumUpTo(2-1), chamando a função novamente com 1 como o argumento do número.

Nossa equação agora é 3 + 2 + sumUp(1)

Quando a função é executada novamente com 1 como o número, o bloco de código da if statement será executado, porque 1 é menor ou igual a 1. Este bloco de código simplesmente retorna o número e a função pode parar de chamar ela mesma. Isso é importante, pois chamar uma função recursivamente sem uma condição que a interrompa tornará a recursividade infinita e causará o travamento de um programa. sumUpTo(1) retorna 1 e interrompe a função.

Nossa equação agora é 3 + 2 + 1, o que equivale a 6.

Solução do código de exemplo:

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

console.log(sumUpTo(4));

Conceitos de JavaScript: Recursão, Funções, Fluxo de Controle, If…Else, console.log()