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

Para começar com a função recursiva em C ++, já conhecemos a idéia básica por trás das funções em C ++, que inclui a definição de função para chamar outras funções também. E este artigo aborda o conceito por trás da definição recursiva, um conceito de ferramenta de jogo em matemática e lógica de programação. Um exemplo familiar inclui fatorial de um número, soma de 'n' números naturais, etc. Uma função que chama por si só é conhecida como função recursiva. Eles são apenas uma função que está sendo invocada repetidamente. A recursão possui uma ferramenta de solução de problemas, na qual divide os problemas maiores em tarefas simples e trabalha individualmente para seguir uma sequência individual.

Os conceitos de estruturas de dados, como pesquisar, classificar e atravessar uma árvore, utilizam a função recursiva para suas soluções. Essa técnica de programação facilita o código. A iteração e a recursão fazem o mesmo processo que uma repetição do código, mas a diferença na recursão é que elas executam uma parte específica com a própria função base. Neste artigo, discutiremos a importância da recursão e seu processo de trabalho com um exemplo em detalhes.

Sintaxe da função recursiva em C ++

A sintaxe geral da função recursiva em c ++ é fornecida como:

return type function name((arguments))
(
Body of the statements;
function name ((actual arguments)) // recursive function
)

Como a função recursiva funciona em C ++?

A recursão executa repetição nas chamadas de função e interrompe a execução quando o caso base se torna verdadeiro. Uma condição de caso base deve ser definida na função recursiva para evitar a mensagem de erro de estouro de pilha. Se nenhum caso base for definido, isso leva a uma recursão infinita. Quando uma função é chamada, ela as empurra para uma pilha de cada vez, para reservar recursos para cada chamada de repetição. Dá o melhor na travessia de árvores. Existem dois tipos diferentes de recursão: recursão direta e indireta.

Recursivo direto: Ilustração

int fibn(n)
(
fib(n);
)
void main ()
(
fib(n);
)

O formato acima é a chamada recursiva direta, na qual chama imediatamente / chama por si só. Considere um segundo tipo chamado recursão indireta que envolve outra chamada de função. Pode ser visto na ilustração abaixo:

Recursivo Indireto: Ilustração

void f(int n) (
f1();
return;
)
void f2( int n) (
f();
return;
)
void f1() (
f2();
return;
)

Exemplos de função recursiva em C ++

No programa abaixo, você pode ver a execução do programa que eu forneci com a condição base padrão. Às vezes, o uso da condição if-else na recursão ajuda a impedir a recursão infinita. O processo do código é feito com a solução parcial no intermediário e estes são combinados com uma solução final em uma recursão de cauda.

Exemplo 1

Aqui está um exemplo simples de uma série de Fibonacci de um número. O programa abaixo inclui uma chamada para a função recursiva definida como fib (int n), que recebe a entrada do usuário e a armazena em 'n'. O próximo passo inclui levar em loop for para gerar o termo que é passado para a função fib () e retorna a série Fibonacci. O caso base é definido com a instrução if, verificando o número = 1 ou 2 para imprimir os dois primeiros valores. finalmente, essa função recursiva continua com o loop para imprimir a série 1, 1, 2.

Código:

#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)
#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)
#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)

Resultado:

Exemplo 2

Verificando o número do palíndromo usando uma função recursiva.

Código:

#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)
#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)
#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)

Resultado:

Exemplo 3

Programe com um gerador de números aleatórios.

Código:

#include
#include
#include
#include
using namespace std;
int rand1(int n);
int main () (
int n, j;
int r;
srand(time (NULL));
cout << "Enter number of dice: ";
cin >> n;
for (j = 1; j <= n; j++) (
r = rand1(5) + 1;
cout << r << " ";
)
system("PAUSE");
return 0;
)
int rand1(int n) (
return rand () % n;
)

O programa acima ilustra um gerador de números aleatórios quando um dado é lançado aleatoriamente. É realizada chamando uma função rand1 (int n) e gera 0 a n-1 números. e definindo o valor inicial com nulo (sem endereço). Por exemplo, se introduzirmos como 4, lança-se a possibilidade de dados como 5, 4, 1, 2.

Resultado:

Existem também alguns conceitos como busca linear, divisor comum e fatorial mais importante de um determinado número que utiliza implementação recursiva.

Prós de recursão

  • O código fornecido por eles é limpo e compacto, simplificando o programa complexo maior. Usa menos variáveis ​​no código do programa.
  • Código complexo e aninhado para loops são evitados aqui.
  • Alguma parte do código requer retorno, que é resolvido recursivamente.

Contras de recursão

  • Leva mais alocação de memória devido à operação de pilha de todas as chamadas de função.
  • Às vezes, ele é mais lento ao executar o processo de iteração. Portanto, a eficiência é menor.
  • É difícil para iniciantes entender o trabalho, pois às vezes o código é aprofundado. se leva a falta de espaço e causa falhas no programa.

Conclusão

Com isso, discutimos como as funções do c ++ funcionam e são definidas recursivamente. E passamos pela correspondência e seus prós e contras da função recursiva no mundo da programação. Em seguida, continuamos mostrando como ele pode ser implementado em C ++ usando uma definição de função recursiva. Além disso, concluímos que a recursão ajuda no C ++ a resolver problemas nos conceitos de estrutura de dados, como travessias, classificação e pesquisa, e pode ser usado com eficácia sempre que necessário.

Artigos recomendados

Este é um guia para a função recursiva em C ++. Aqui discutimos como a função recursiva funciona em C ++, sintaxe junto com diferentes exemplos e implementação de código. Você também pode consultar os seguintes artigos para saber mais -

  1. O que são funções de matriz C ++?
  2. Visão geral das funções de seqüência de caracteres C ++
  3. Melhor compilador C ++ (exemplos)
  4. Introdução aos comandos C ++
  5. Série Fibonacci em Java
  6. Gerador de número aleatório no Matlab
  7. Gerador de número aleatório em c #
  8. Palíndromo em C ++
  9. Gerador de número aleatório em JavaScript
  10. Os 11 principais recursos e vantagens do C ++
  11. Aprenda os tipos de funções de matriz em PHP