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:
