Funçoes recursivas
Qualquer função em linguagem C/C++ pode ser chamada de um modo recursivo, isto é, uma função pode chamar-se a si própria. O número de vezes que uma função pode ser chamada recursivamente é limitado ao tamanho da pilha (stack), se este valor for alcançado, o programa termina com “error: Stack Fault” ou “Stack Overflow”.
Definição:
Função Recursiva é uma função que invoca a si própria, ou invoca outra função, e na sequência das diversas subfunções, uma das subfunções invoca a primeira função.
Cada vez que uma função é chamada de forma recursiva, é alojado e guardado uma cópia dos seus parâmetros por forma a não perder os valores dos parâmetros das chamadas anteriores. Em cada instância da função, só são directamente acessíveis os parâ etros criados para esta instância, não sendo directamente acessíveis os parâmetros de outras instâncias. A informação guardada na invocação de uma função é designada por Estrutura de
Invocação e consiste basicamente na seguinte informação:
- Endereço de retorno (quando a função terminar o programa deve continuar a sua execução na linha seguinte à invocação da função)
- Estado dos registos e flags do CPU
- Variáveis passadas como argumentos para a função (por valor, referência, etc.)
- Variável de retorno (por valor, referência, etc.)
A invocação de uma função recursiva é igual à invocação de uma função não recursiva, na qual é necessário guardar uma estrutura de invocação, sendo esta estrutura libertada depois do fim da execução da função e afectação/actualização do valor de retorno.
./012
3454676/
849:1
7:/936/;2 numero; fact = factorial1(numero);