Introdução à função recursiva em C

O processo de repetição dos itens de maneira semelhante à anterior é conhecido como recursão. Diz-se que uma função é recursiva se for chamada dentro de si mesma. A recursão é suportada pela linguagem de programação C. Abaixo estão duas condições críticas para implementar a recursão em C:

  • Uma condição de saída: Essa condição ajuda a função a identificar quando sair dessa função. Caso não especifiquemos a condição de saída, o código entrará em um loop infinito.
  • Alterando o contador: Alterando o contador em todas as chamadas para essa função.

Dessa forma, podemos implementar uma função recursiva na linguagem de programação C. Essas funções são úteis para resolver problemas matemáticos de dinheiro que exigem que um processo semelhante seja chamado várias vezes. Exemplos de tais problemas são o cálculo do fatorial de várias gerações de séries de Fibonacci.

Sintaxe:

int fun(a1)
(
If(base_condition) return val;
fun(a2);
)

Como a função recursiva funciona em C?

Funções recursivas são a maneira de implementar a equação na linguagem de programação C. Uma função recursiva é chamada com um argumento passado para ele, digamos n, a memória na pilha é alocada para as variáveis ​​locais e para as funções. Todas as operações presentes na função são executadas usando essa memória. A condição para a saída é verificada se estiver preenchida. Quando o compilador detecta uma chamada para outra função, ele imediatamente aloca nova memória na parte superior da pilha, onde uma cópia diferente das mesmas variáveis ​​locais e a função são criadas. Digite o mesmo processo continua.

Quando a condição base retorna verdadeira, o valor específico passado para a função de chamada. A memória alocada para essa função é limpa. Da mesma forma, o novo valor é calculado na função de chamada e a TI retorna à função de super chamada. Dessa forma, chamadas recursivas são feitas para a exclusão da função atinge a primeira função e toda a memória da pilha é limpa e a saída é retornada. Caso a condição base ou a condição de saída não esteja especificada na função, as chamadas recursivas à função podem levar a um loop infinito.

Exemplo de função recursiva

Agora veremos os exemplos da função recursiva em C

Código:

#include
int fun(int n)
(
if(n==1) return 1 ; //exit or base condition which gives an idea when to exit this loop.
return n*fun(n-1); //function is called with n-1 as it's argument .
//The value returned is multiplied with the argument passed in calling function.
)
int main()(
int test=4;
int result =0;
result =fun(test);
printf("%d", result);//prints the output result.
)

Resultado:

Explicação do código acima

O exemplo acima é de encontrar o fatorial de um número. Quando a função principal chama diversão (4), primeiro a condição de saída (4 == 1) é verificada e então 4 * diversão (3) é chamada. Novamente, a condição base (3 == 1) é verificada. Da mesma forma, ele retornará 3 * fun (2) é chamado e isso continuará até 2 * fun (1) é chamado e onde ele atender à condição básica e retornar 1, em seguida, chamar a função retornará 2 * 1 e 3 * 2 * 1 e da primeira chamada 4 * 3 * 2 * 1 é retornado. Assim, o resultado nas funções principais armazena 24 e imprime isso na saída.

Alocação de memória da função recursiva

Cada chamada para uma função no idioma c resulta em alocação de memória na parte superior de uma pilha. Quando uma função recursiva é chamada de memória, ela é alocada na parte superior da memória que foi alocada para a função de chamada, com todas as cópias diferentes das variáveis ​​locais criadas para cada chamada da função.
Qual é a condição básica atingida, a memória alocada para a função é destruída e o ponteiro retorna para a função de chamada? esse processo é repetido e depois a primeira função de chamada e, finalmente, a memória da pilha fica vazia.

No exemplo acima, para calcular o fatorial de um número abaixo, está o cenário para alocação de memória.

Passo 1

Passo 2

Etapa 3

Passo 4

Etapa - 5

Etapa - 6

Etapa - 7

Etapa - 8

Etapa - 9

Tipos de recursão

Existem dois tipos de recursão na programação C que são apresentados abaixo:

1. Recursão Cauda e Não Cauda

O tipo de recursão acima fornecido é explicado abaixo:

  • Recursão da cauda

É um tipo de chamada de recursão da função recursiva na função que é a última ação a ser executada na definição da função. Significa que a chamada recursiva ocorre depois que tudo o mais na função é implementado.

O uso de uma recursão de cauda em nosso programa em hansis é o desempenho do programa e também reduz o uso de memória dessa função. É assim porque, como outra lógica da função foi implementada na memória alocada para a função de chamada, pode ser removida da pilha e reutilizada.

Código:

int fun1(n)(
printf(“the result is “);
return fun1(n-1);
)
void main()
(
fun1(4);
)

  • Recursão Não Cauda

Esse tipo de colagem recursiva recursiva feita no meio da definição da função. A recursão das calças masculinas é concluída e, se os valores retornados à função de chamada, há mais etapas a serem executadas, portanto a memória não pode ser apagada.

Código:

int fun1(n)(
printf(“the result is “);
return n* fun1(n-1);
)
void main()(
fun1(4);
)

2. Recursão Direta e Indireta

O tipo de recursão acima fornecido é explicado abaixo:

  • Recursão Indireta

Diz-se que a recursão indireta ocorre quando uma função específica é chamada de maneira recursiva no meio de outra função.

Código:

int fun1()(
fun2();
)
int fun2()(
fun1(); // calling the procedure recursively using another function.
)
void main()(
fun1();
)

  • Recursão Direta

Diz-se que a recursão direta ocorre quando a chamada recursiva para a função é feita dentro de sua própria definição.

Código:

int fun1()(
fun1();
)
void main()(
fun1();
)

Conclusão

Pode-se concluir facilmente que as funções recursivas são, no máximo, importantes para resolver problemas matemáticos que exigem que um método semelhante, toda a lógica seja implementada repetidamente até que uma condição de saída seja atendida. Muitos problemas, como as torres de Hanói, as travessias de árvores, calculando a profundidade dos gráficos.

É importante mencionar uma condição básica para a função recursiva. Os requisitos de memória e tempo são maiores para o programa recursivo em comparação aos iterativos, portanto, devem ser usados ​​com cuidado.

Artigos recomendados

Este é um guia para exemplos de Função Recursiva em C. Aqui discutimos trabalho, tipos, alocação de memória e exemplos de Função Recursiva em C. Você também pode consultar os seguintes artigos para aprender mais.

  1. Matrizes em programação C
  2. Palíndromo no programa C
  3. Padrões em Programação C
  4. C vs C ++
  5. Palindrome em JavaScript
  6. Guia da série Fibonacci em JavaScript