Não é difícil encontrar programadores que odeiam recursividade. Mas por quê tanto desprezo por uma técnica tão poderosa? Será que é difícil escrever funções recursivas? Códigos recursivos são sempre lentos?
Agora a verdade:
Só fala mal da recursividade quem NÃO sabe usar recursividade!
Durante a fase de projeto de um programa, é importante descobrir inicialmente qual problema estamos tentando resolver. Ou seja, precisamos inicialmente descobrir "O QUE DEVE SER FEITO", e só depois nos preocuparemos com o "COMO FAZER".
Na fase de projeto, o programador deve abstrair o problema, ou seja, deve evitar se preocupar com detalhes irrelevantes. Por exemplo, decidir se o programa será recursivo ou iterativo é irrelevante durante o projeto, é um mero detalhe de implementação!
Infelizmente, alguns programadores nunca escrevem códigos recursivos, e sabem qual a justificativa? Dizem que recursividade é lenta. E isso tem um motivo: Aprenderam recursividade com fatorial e fibonacci! E todos sabem que não devemos usar recursividade nesses casos.
Existem inúmeras situações onde a recursividade é indispensável. Basta pensar em árvores binárias, que são estruturas naturalmente recursivas. Já imaginaram manipular árvores binárias sem recursividade? Até dá para fazer, mas o esforço é desnecessário. Vamos analisar uma implementação recursiva que realiza o caminhamento pré-ordem em uma árvore binária:
void preOrdem(struct tnode *t) { if(t != NULL) { printf("%d ", t->value); preOrdem(t->left); preOrdem(t->right); } }
Podemos perceber que de forma clara e enxuta resolvemos o problema em poucas linhas.
Mas ainda tem quem se preocupe com o "estouro da pilha" de execução dos programas! E com isso, não quero dizer que o estouro não possa acontecer, mas será que na maioria das vezes o problema é mesmo o tal "estouro da pilha"?
Pode ser que para Software isso faça sentindo, mas para Hardware toda essa sua argumentação não vale de nada. ;)
ResponderExcluirDurante o projeto de um hardware podemos usar recursividade tbm, várias estruturas de circuitos integrados podem ser recursivos durante a fase de projeto. Dizer que "não vale de nada" é algo muito forte. De qualquer forma obrigado pela interação.
ExcluirQual argumentação? Se você fala do processo de abstração você é muito burro mesmo. É muito mais fácil projetar um sistema digital a partir de uma máquina de estados (que é uma abstração) do que a esmo.
ExcluirE, dá pra implementar hardware a partir de algoritmo, inclusive recursivo.
Confira "An Adder Tree in Lava" em http://raintown.org/lava/ para um exemplo de um somador recursivo.
ResponderExcluirÓtimo exemplo. ;)
Excluirinteressante o tema do post, mas achei extremamente não didático para quem nunca ousou usar uma recursividade na vida, no caso, eu mesmo.
ResponderExcluirEu com toda certeza iria gostar muito mais da sua ação aqui se de fato vc explicasse algo de verdade. Você tocou num assunto de programação para programadores, para mim isso é meio inútil.
É o mesmo com certos músicos que fazem música para músicos, o resto não digere nada!
mas isso é só um conselho, não quero desmerecer seu ato de publicar sobre o assunto. Entenda meu ato como uma crítica positiva...
Entendo, mas fique tranquilo, pq hoje mesmo começaremos uma série de posts sobre recursividade. Com esse post eu quis apenas provocar os programadores e abrir um debate. Acompanhe os próximos posts, espero que goste. Obrigado pela interação.
Excluir