Esse lance de funções recursivas, na minha opinião é o que há de
de mais bonito e elegante na programação. Através da recursividade, podemos
escrever rotinas funcionais com muito mais clareza e muito menos linhas.
Uma rotina recursiva é uma rotina que evoca a si mesma. Isso é muito
prático para o programador, mas é muito penoso para a máquina e, quase
sempre uma rotina recursiva é mais lenta do que uma iterativa ou
não-recursiva. Isso acontece porque a cada chamada de uma sub-rotina feita
pelo programa, o computador guarda na pilha interna o endereço da instrução
imediatamente posterior à essa chamada para que, ao final da execução dessa
subrotina, a execução do programa possa retornar ao mesmo lugar de onde foi
desviada.
Quando várias chamadas de sub-rotinas são realizadas seguidamente
sem haver retorno, o que geralmente acontece em funções recursivas, a pilha
interna do computador pode aumentar até não caber em seu segmento, até que
ocorra um estouro de pilha ou "stack overflow".
Vamos ver agora um exemplo clássico de aplicação de funções
recursivas, o cálculo de um fatorial:
// retorna o fatorial de um número, ou seja: n*(n-1)*(n-2)* ... *1
int fatorial (int N)
{
if (N == 1) return 1;
return N * fatorial (N - 1);
}
Simples não? Esse tipo de rotina é muito utilizado em árvores
binárias além de ser indispensável para a solução do problema das "Torres
de Hanói". De uma olhada nesses tópicos, pois eles são muito interessantes.
Para saber mais...
------> Cálculo do Máximo Divisor Comum através de um rotina recursiva em C
------> Pilhas
------> Torres de Hanói
------> Árvores Binárias