Dando continuidade ao nosso estudo sobre recursão, na aula de hoje aprenderemos como calcular o fatorial com recursão.
Você sabe calcular o fatorial?
Lembre-se sempre que se você não souber resolver o problema, será impossível programar o computador para resolver o mesmo problema, ok?
O fatorial de um número n é uma série de multiplicação partindo de n até 1. Tomemos como exemplo o número 4. O fatorial de 4 é expresso e calculado da seguinte forma:
4! = 4 * 3 * 2 * 1 = 24
Por definição a matemática nos diz que o fatorial de 0 e de 1 é 1. Temos aqui nosso ponto de parada. Se o usuário digitar 0 ou 1 iremos retornar 1. Caso contrário, iremos retornar o valor de n vezes a chamada recursiva para o valor n – 1 (que em algum momento chegará em 1).
Imagine que o usuário digitou 4. Esse valor de n irá gerar a seguinte pilha de recursão:
2 * fatorial(1)
3 * fatorial(2)
4 * fatorial(3)
Na última chamada recursiva, onde n vale 1, teremos o retorno igual, pois 1! = 1. Neste momento o computador começa a desempilhar as chamadas recursivas feitas e realizar as multiplicações.
2 * 1
3 * fatorial(2)
4 * fatorial(3)
Duas veze um é igual a dois. Este valor é retornado para a chamada anterior.
3 * 2
4 * fatorial(3)
O processo se repete enquanto houver chamadas recursivas empilhadas. Três vezes dois é igual a seis. Este valor também é retornado.
4 * 6
Seis vezes 4 é igual a 24. Como esta é a última chamada (a primeira feita lá na função main com n = 4, o resultado 24 é retornado lá para a função main, onde foi feita a chamada à função fatorial.
#include <stdio.h> #include <stdlib.h> // Função recursiva para calcular o fatorial de um número inteiro positivo n int fatorial(int n){ if(n == 0 || n == 1) return 1; else return n * fatorial(n - 1); } int main () { int n; printf("Digite um valor maior que zero: "); scanf("%d", &n); printf("Fatorial de %d: %d\n", n, fatorial(n)); return 0; }