Cristian Fernandes en Java Brasil, Programadores, Desenvolvedores / Programadores / Front-End Atendente • Carrefour Hace 6 d · 1 min de lectura · +200

Eliminação de recursividade

Eliminação de recursividade

Na computação, recursividade é um processo ou uma rotina que invoca a si mesmo. Esta é a definição básica disso. Um exemplo de recursão é a genealogia de alguém. Exemplo eu quero saber quem foi tataravô de meu pai, eu usaria este processo: Começando pelo meu pai menos 1, ou seja (pai – o meu avô) resta (pai – meu bisavô) e continuo assim até chegar aonde quero. Oque vou mostra aqui e a eliminação da recursão aplicado na computação e sua atualidade.

Vamos mostrar algumas técnicas que podem ser utilizadas nos subprogramas recursivos tornando em repetitivos, e assim tornando o processamento mais eficientes. 


Número de Fibonacci!

Um exemplo de cálculo recursivo, e complexo é o número de Fibonacci. Esta sucessão foi estudada pelo matemático Fibonacci, quando dizia acerca do crescimento de uma população de coelhos.

Veja um algoritmo de implementação recursiva dos números de Fibonacci:

public static long numfibonacci (int pN)

{

if (pN < 2) pN; // condição de paragem

return  numfibonacci ) return (pN -1) + numfibonacci (pN -2); //chamada recursiva

.

 }

Este algoritmo acima é recursivo, tem pouca linha de código, mas não quer dizer que é eficiente. O que estou querendo dizer que tem situações que a forma recursiva gasta mais processamento para achar o mesmo resultado. Exemplo, o cálculo do Fibonacci 5 custa 7 adições e o Fibonacci de 4, dá um total de 12 adições. O Fibonacci de 7 custa 20 adições e o de 8 33 adições. O número de adições duplica. Pensando nisso antes de usar o método recursivo devemos analisar qual os meios consomem menos processamento e deixa também o código mais dinâmico. Temos três formas básica de analisar isso: o primeiro é a forma recursiva como já vimos o outro é a programação dinâmica que não será mostrado neste artigo e pôr fim a forma repetitiva. Vejam o algorítimo abaixo forma repetitiva:

public static long Repetitiva (int pN)

{

long antes = 0, previw = 1, passado = 0;

If(pN < 2) return (long) pN;

for (int i = 2; i<= pN; i++)

{

passado = previw + antes;

antes = previw = passado;

}

return passado;

}

Conclusão

 Eu mostrei como usar a eliminação de recursividade usando a memória pilha, aplicando a forma repetitiva. Então quando devo usar o método recursivo ou repetitivo? De forma pratica: é analisando o tempo que ambos levam no processamento para fazer a mesma coisa.


Cristian Fernandes Hace 5 d · #2

#1 é isso aí!

0

Que interessante! Deu vontade de seguir a profissão!

0