Visualizando a recursão. É interessante observar a recursão ‘em ação’. Modifique a função fatorial da Figura 5.14 para imprimir sua variável local e o parâmetro de chamada recursiva. Para cada chamada recursiva, apresente as saídas em uma linha separada e acrescente um nível de recuo. Faça o máximo para tornar as saídas claras, interessantes e significativas. Seu objetivo aqui é projetar e implementar um formato de saída que ajude uma pessoa a entender melhor a recursão. Você pode querer acrescentar essas capacidades de exibição a muitos outros exemplos e exercícios de recursão no decorrer do livro.

Passo 1

Fala Galera!! Bora resolver mais um exercício.

Nesse exercício teremos que criar um programa que seja capaz de criar uma função que calcule o fatorial de um inteiro não negativo n.

Vamos utilizar a definição de recursividade na nossa função. Uma definição recursiva da função de fatorial é obtida observando-se o seguinte relacionamento:

n! = n · (n – 1)!

Por exemplo, 5! é nitidamente igual a 5 * 4!, como mostramos em:

5! = 5 · 4 · 3 · 2 · 1

5! = 5 · (4 · 3 · 2 · 1)

5! = 5 · (4!)

Passo 2

Além de realizar a recursividade, nosso programa deve exibir o resultado de uma forma que fique claro o uso da recursividade.

Para isso vamos criar outra função que será responsável por exibir o resultado. Vamos exibir as saídas em uma linha separada e acrescentar um recuo, de forma que fique mais dinâmico de ver o resultado. Portanto, as funções fatorial e de imprimir o resultado ficarão da seguinte forma:

/* definição recursiva da função fatorial */

long factorial( long number ){

/* caso básico */

if ( number

return 1;

} /* fim do if */

else{ /* etapa recursiva */

printRecursion( number );

return ( number * factorial( number - 1 ) );

} /* fim do else */

}/* fim da função fatorial */

/* printRecursion adiciona resultados e indentação para ajudar

visualizar a recursividade */

void printRecursion( int n ){

printf( "number = %*d\n", n, n );

}

Passo 3

Com as duas funções definidas, vamos usar um loop que a cada interação irá calcular o fatorial e mostrar o resultado, chamando as duas funções. Ficará da seguinte forma:

#include

/*Função recursiva fatorial */

long factorial( long number );

/*função exibir recursão */

void printRecursion( int n );

int main()

{

int i; /* contador */

/* loop 5 vezes; durante cada iteração, calcula

fatorial( i ) e mostra o resultado */

for ( i = 0; i

printf( "%2d! = %ld\n", i, factorial( i ) );

}/* fim do for */

return 0;

} /* fim do main */

Agora, é só juntar tudo e estará pronto o nosso programa.

Por hoje é só Galera!!! Até o próximo exercício.

Resposta

O programa final será:

A saída: