| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2003 01:03:34
|
Smurf (SBG)
Smalltalk
![[Avatar]](/images/avatar/c8e2d46c3e24da1aaaec1.gif)
Membro desde: 15/01/2003 00:43:52
Mensagens: 4
Localização: Ilha Digos
Offline
|
Eu só queria um bom exemplo para a utilização da recursividade!!!
Pois é muito complexo!!!!
Até agora o máximo que consegui fazer com isso foi um programa que calcula o fatorial de 10.....
Se alguém tem alguma noção desse troço, me mande uma ajuda aí!!!
Valew!!!!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2003 01:35:04
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5972
Localização: São Paulo
Offline
|
Bom, é muito raro usar recursidade. Geralmente voce nao vai precisar dela. Antes de mais nada, lembre-se: tudo que da para fazer com recursividade é possivel fazer sem ela.
Por ser incomum, é meio complicado achar algum exemplo. Um caso onde usei foi o seguinte:
Tenho uma tabela de cadastro de categorias. Cada categoria tem um id proprio e um id "pai". Uma categoria de nivel mais alto tem como id pai o numero 0. Cada categoria pode ter ilimitadas subcategorias, que por sua vez podem ter outras categorias e subcategorias.
Entao eu precisava mostrar as categorias em forma de 'arvore' ( como a listagem de diretorios na barra da esquerda no windows explorer ). Ou seja:
e assim por diante. O algoritmo eh assim: pego todas as categorias com id pai = 0. Assim tenho todas as de nivel mais alto. Entao, em um for(), pego o id de cada categoria "principal" e verifico se existe alguma categoria que tenha como id pai o id da categoria que estou processando no nomento. Se alguma for encontrada, repito o mesmo processo para a nova categoria encontrada. Ou seja, sempre preciso checar se ha mais subniveis e a quem eles estao relacionados.
A parte recursiva eh essa de verificar se existe alguma categoria onde o id pai seja o id da categoria processada no momento. O codigo original eh meio grande, entao vou colocar aqui um pseudo-codigo apenas para exemplificar. Sao 2 metodos: um inicial, que eh a entrada, e outro, que eh o recursivo.
Note que dentro do metodo "Recursivo" eu chamo ele mesmo quantas vezes forem necesarias para processas os "n" niveis se subcategorias.
Recursividade, como voce disse, eh meio complicado, e muito pouco usado. Nao se preocupe se nao entender de cara, pois eu tambem nao entendi no inicio
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2003 08:41:57
|
Elvis.The.Pelvis
JavaGuru
![[Avatar]](/images/avatar/c8a589523f35508a5d7ec.jpg)
Membro desde: 18/12/2002 17:45:34
Mensagens: 220
Localização: Recife/PE
Offline
|
Embora seja difícil VOCÊ ter que implementar a recursividade, ela está muito presento no nosso dia a dia. O bom é que ela já está implementada para você.
A recursividade é bastante utilizada nos algoritmos de ordenação de listas e arrays, árvores entre outros.
Mas como a Collection faz tudo isso pra vc...
Mas o Rafael tem razão. Tudo você pode fazer sem recursividade. Até mesmo os algoritmos mais complexos podem simular a recursividade com pilhas(stack), que inclusive acho melhor, é mais desafiador e poupa recursos da máquina.
Você está fazendo algum curso???
Na universidade agente realmente vê a importância da recursividade. Você provavelmente vai se deparar com ela durante seu curso, caso esteja fazendo algum.
E vamos a um pequeno exemplo.
Eu tenho um pool de conexão. Um pool de conexção é um "array" ou lista com várias conexoes disponiveis. O custo de se criar uma conexão é grande, então o pool cria várias conexões na inicializaçao do programa e depois fica disponibilizando as já criadas.
Exite um método chamado getConnection, que pega o primeiro elemento (conexão) do pool, retira-o de la, adiciona a uma lista de conexões em uso e retorna a referência ao usuário. Só que uma conexão pode ter sido invalidade. Por exemplo ulgum usuário a fechou por engano. Temos então que testar se a conexão está valida.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2003 11:11:07
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 3637
Localização: São Paulo
Offline
|
escrever a seria de fibonacci em DUAS linhas!
bacaaaaaaaana!
|
http://blog.caelum.com.br
Arquitetura e Design de Software: uma visão sobre a plataforma java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/01/2003 23:29:58
|
Smurf (SBG)
Smalltalk
![[Avatar]](/images/avatar/c8e2d46c3e24da1aaaec1.gif)
Membro desde: 15/01/2003 00:43:52
Mensagens: 4
Localização: Ilha Digos
Offline
|
Ae, valew pelos exemplos e pelas lições!!!!!
Só tenho uma pergunta? Se alguém experiente estiver lendo isso aqui, não exite em responder!!!
Eu to começando agora nessa area, to fazendo um curso de processamento de dados.. Já tem 6 meses. Daqui um ano eu o termino e vou para a universidade!
Ai vai a minha pergunta: Eu naum sei qual é melhor pra mim, engenharia ou ciencia da computação? Não sei definir ainda esses dois termos...
Eu quero seguir carreira com programação de jogos, e não sei por qual optar... Tendo em mente que logo apos o curso academico eu vou procurar um pra programação de jogos...
Ae se tem alguem que pode me ajudar nessa resposta fora do contexto apresentado. Sou muito grato!!!
Valew
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/01/2003 23:37:13
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5972
Localização: São Paulo
Offline
|
Engenharia eh mais voltado a hardware, redes.. Ciencias eh mais voltado a software, pesquisas.
Rafael
ps: programacao de jogos rulez
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2003 00:08:38
|
Smurf (SBG)
Smalltalk
![[Avatar]](/images/avatar/c8e2d46c3e24da1aaaec1.gif)
Membro desde: 15/01/2003 00:43:52
Mensagens: 4
Localização: Ilha Digos
Offline
|
Ae, só mais uma questão!!!
Eu to desenvolvendo um programa que é uma espécie de prompt de comando.... E eu to querendo criar um esquema que não permita que seja dado dois espaços seguidos, apenas um....
Alguém tem alguma idéia aí? Ae valew pela idéia dos cursos universitários!
Falow!!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2003 09:32:15
|
diogompbr
JavaChild
![[Avatar]](/images/avatar/c8be7c6a3e424c0405189.gif)
Membro desde: 25/10/2002 09:22:45
Mensagens: 112
Localização: São Paulo - SP
Offline
|
Coloca um verificação...
Quando o cara digitar espaço você espera a próxima letra. Esta não poderá ser um outro espaço.
Se for, você o ignora...
[]s
|
Diogo Montanaro Pedroso
diogompbr@yahoo.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/01/2003 19:26:41
|
J2Alex
JavaEvangelist
![[Avatar]](/images/avatar/f4be00279ee2e0a53eafdaa94a151e2c.jpg)
Membro desde: 18/01/2003 08:14:41
Mensagens: 341
Localização: São José dos Campos
Offline
|
Caro amigo,
Só mais um pequeno detalhe sobre recursão: se não for usada com coerência pode tornar o programa extremamente lento.
Como dito: tudo o que pode ser criado com recursividade, pode também ser criado sem... e ainda que com mais trabalho, pode ser benéfico o resultado final, pois ganha-se em performance.
Como o nosso amigo Paulo Silveira mandou um exemplo sobre a série de fibonacci, vamos exemplificar. O método recursivo que ele utilizou pode ser substituído pelo código abaixo ( sem recursão ):
Tudo bem, não tem duas linhas - mas experimente calcular o fibonacci para o valor 50 nas duas abordagens... o resultado vai falar por si mesmo...
|
Alexandre ( J2Alex )
Desenvolvedor Java EE
ITA (Instituto Tecnológico de Aeronáutica)
Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0
Não temeis pelos dias que virão - tens a espada e tens as honras e um coração gentil. |
|
|
 |
|
|