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