Na aula anterior aprendemos o que é uma função / procedimento recursivo. Nesta aula criaremos nossa primeira função recursiva para calcular o fatorial de um número.
Como calcular o fatorial com recursão?
Antes de qualquer linha de código, vamos relembrar o que é o fatorial de um número.
Calcular um fatorial de um número x significa realizar todas as multiplicações de x até 1. Vamos a um exemplo.
O fatorial de 4, representado por 4! é:
4! = 4 * 3 * 2 * 1 = 24.
Matematicamente falando existem apenas dois números cujo fatorial não precisa ser calculado, o zero e o um:
1! = 1 e
0! = 1
Agora já temos tudo que precisamos para fazer nossa função recursiva.
O primeiro ponto importante ser observado é o ponto de parada. Nesta caso temos dois pontos de parada possíveis, zero e um. Caso x seja um desses dois valores, basta retornar 1.
se(x == 0 ou x == 1) retorne 1
Contudo, se x não for zero nem um, precisamos então iniciar as multiplicações e fazer a chamada recursiva. Isso pode ser feito da seguinte forma:
senao retorne x * fatorial(x - 1)
Perceba que fazemos a multiplicação de x com o que vir de retorno da chamada recursiva. Como nosso ponto de parada retorna 1, faremos as multiplicações de 1 até x.
Imagine que o usuário digitou o número 5. A multiplicação no senao apenas será feita quanto o computador tiver o retorna da chamada. Assim, Quando chegar no nosso ponto de parada será retornado 1. Esse 1 será multiplicado com 2 e o resultado será retornado. O 2, por sua vez, será multiplicado com 3 (2 * 3 = 6) e o 6 será retornado. O 6 será multiplicado com o 4 (6 * 4 = 24) e o 24 será retornado. O 24 será multiplicado com o 5 (24 * 5 = 120) e, como acabaram as chamadas recursivas que estavam empilhadas, o resultado 120 será retornado para quem chamou na função main.
Código completo em C para calcular o fatorial com recursão
programa{ /* Aula 112: Fatorial com função recursiva Escrito por Wagner Gaspar Março de 2021 */ // função recursiva que calcula e retorna o fatorial de x funcao inteiro fatorial(inteiro x){ se(x == 0 ou x == 1) retorne 1 senao{ retorne x * fatorial(x - 1) } } funcao inicio(){ inteiro valor escreva("Digite um valor positivo: ") leia(valor) escreva("\nFatorial de ", valor, " é: ", fatorial(valor)) } }