GeeksforGeeks (Português)

recursão:
em termos de programação uma função recursiva pode ser definida como uma rotina que se chama direta ou indiretamente.usando algoritmo recursivo, certos problemas podem ser resolvidos facilmente. Towers of Hanoi (TOH) é um desses exercícios de programação. Tente escrever um algoritmo iterativo para TOH. Além disso, cada programa recursivo pode ser escrito usando métodos iterativos (ver estruturas de dados por Lipschutz).recursão matemática ajuda a resolver alguns quebra-cabeças facilmente.,por exemplo, uma pergunta de rotina de entrevista, em um partido de N Pessoas, cada pessoa vai apertar sua mão com a outra pessoa apenas uma vez. No total, quantos batidos de mãos aconteceria?
Solution:
It can be solved in different ways, graphs, recursion, etc. Vejamos como é possível resolvê-lo de forma recursiva.existem N Pessoas. Cada pessoa aperta a mão uns com os outros apenas uma vez. Considerando a n-ésima pessoa, ele tem que apertar a mão com (n-1) pessoas. Agora o problema reduzido a pequena instância de (n-1) pessoas. Assumindo que TN é um aperto de mão total, ele pode ser formulado recursivamente.,
TN = (N-1) + TN-1
resolvendo-o recursivamente produz uma série aritmética, que pode ser avaliada para N(n-1)/2.exercício: em uma festa de casais N, apenas um sexo (masculino ou feminino) pode apertar a mão com cada um. Quantos apertos de mão aconteceria?geralmente programas recursivos resultam em complexidades de tempo pobres. Um exemplo é a série Fibonacci. A complexidade de tempo do cálculo do número n-ésimo de Fibonacci usando recursão é de aproximadamente 1,6 N. Isso significa que o mesmo computador leva quase 60% mais tempo para o próximo número de Fibonacci. O algoritmo de Fibonacci recursivo tem sobreposições sobrepostas., Existem outras técnicas como programação dinâmica para melhorar tais algoritmos sobrepostos.
No entanto, poucos algoritmos, (e.g. merge sort, quick sort, etc…) resulta em complexidade de tempo ideal usando recursão.
Base Case:
One critical requirement of recursive functions is termination point or base case. Cada programa recursivo deve ter o caso base para se certificar de que a função terminará. O caso de base em falta resulta num comportamento inesperado.,
diferentes maneiras de escrever funções recursivas
função chamando a si mesma: (caminho direto)
A Maioria de nós ciente pelo menos duas maneiras diferentes de escrever programas recursivos. Abaixo estão as torres de código Hanói. É um exemplo de chamada direta.

Saída:

Move the disk 1 from S to DMove the disk 2 from S to AMove the disk 1 from D to AMove the disk 3 from S to DMove the disk 1 from A to SMove the disk 2 from A to DMove the disk 1 from S to D

a complexidade de tempo do TOH pode ser calculada pela formulação de número de movimentos.
precisamos mover os primeiros discos N – 1 de fonte para auxiliar e de auxiliar para destino, ou seja, os primeiros discos N-1 requerem dois movimentos. Mais uma jogada do último disco da fonte para o Destino., Matematicamente pode ser definido recursivamente.
MN = 2MN – 1 + 1.podemos facilmente resolver a relação recursiva acima (2N-1), que é exponencial.
Recursion using mutual function call: (Indirect way)
Indirect calling. Embora menos pratical, uma função pode chamar outra função que inturn chama de função anterior. Neste caso, ambas as funções devem ter o caso de base.
programação defensiva:
podemos combinar técnicas de codificação defensiva com recursão para a funcionalidade graciosa da aplicação., Normalmente programação recursiva não é permitida em aplicações críticas à segurança, tais como controles de voo, monitoramento de saúde, etc. No entanto, pode-se usar uma técnica de contagem estática para evitar chamadas descontroladas (não em sistemas críticos de segurança, pode ser usado em sistemas suaves em tempo real).

callDepth depth depends on function stack frame size and maximum stack size.
Recursion using function pointers: (Indirect way)
Recursion can also implemented with function pointers. Um exemplo é o tratamento de sinais em sistemas de reclamações POSIX., Se o manipulador faz com que o evento desencadeie o mesmo devido ao qual o manipulador está sendo chamado, a função irá reentrar.

graças a Venki por escrever o post acima. Por favor, escreva comentários se encontrar alguma coisa incorreta, ou você quer compartilhar mais informações sobre o tópico discutido acima.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *