Factorial Fun pt-br Explainer

Explicação de Diversão fatorial

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

Passo a passo da solução: A função factorial() pega um número como argumento e retorna o produto de cada número até esse número. Por exemplo, factorial(5) retornará 120, como 5 * 4 * 3 * 2 * 1 = 120.

Para concluir o desafio, mude o bloco de código dentro da outra if…else statement de return number * factorial(number) para return number * factorial(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 pegará o número e o multiplicará pelo 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: factorial(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 * factorial(2).

A equação agora é 3 * factorial(2).

A if statement verifica novamente o número para ver se 2 é menor ou igual a 1. Isso ainda é falso, então o bloco else será executado, desta vez retornando 2 * factorial(1), chamando a função novamente com 1 como o argumento do número.

Nossa equação agora é 3 * 2 * factorial(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 final é 3 * 2 * 1, que é igual a 6.

Também pode ser visualizado desta forma:

factorial(3) → (3 * factorial(2))
factorial(2) → (2 * factorial(1))
factorial(1) → 1

O que simplifica:

factorial(3) → (3 * (2 * (1) ) ) 

Solução do código de exemplo:

(Toque abaixo para revelar)

function factorial(number) {
  if (number <= 1) {
    return 1;
  } else {
    return number * factorial(number - 1);
  }
}

console.log(factorial(5));

Conceitos de JavaScript: Recursão, Funções, Fluxo de Controle, If…Else Statements

1 Like