aula 155

Como calcular o fatorial com recursão?

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;
}

Deixe um comentário

18 − dezoito =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.