<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Qual a utilidade da recursividade?"]]></title>
		<link>http://www.guj.com.br/posts/list/4.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Qual a utilidade da recursividade?"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Qual a utilidade da recursividade?</title>
				<description><![CDATA[ Eu só queria um bom exemplo para a utilização da recursividade!!!<br /> Pois é muito complexo!!!!<br /> Até agora o máximo que consegui fazer com isso foi um programa que calcula o fatorial de 10.....<br /> Se alguém tem alguma noção desse troço, me mande uma ajuda aí!!!<br /> <br /> Valew!!!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5003.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5003.java</link>
				<pubDate><![CDATA[Wed, 15 Jan 2003 01:03:34]]> GMT</pubDate>
				<author><![CDATA[ Smurf (SBG)]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ 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. <br /> <br /> Por ser incomum, é meio complicado achar algum exemplo. Um caso onde usei foi o seguinte:<br /> <br /> 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. <br /> Entao eu precisava mostrar as categorias em forma de 'arvore' ( como a listagem de diretorios na barra da esquerda no windows explorer ). Ou seja:<br /> <br /> [code]<br /> Categoria 1<br />     Sub categoria<br /> 	Outra sub<br /> 	    Sub da sub<br /> 			Sub da sub sub<br /> 		Mais uma sub<br /> 			mais uma<br /> 			mais outra<br /> Categoria 2<br /> Categoria 3<br /> 	aaaa<br /> 	bbbb<br /> 	    bbbb1<br /> 		bbbb2<br /> Categoria 4<br /> 	eeee<br /> 		ttttt<br /> 			dddd<br /> 		ggggg<br /> 	oooo<br /> [/code]<br /> <br /> 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. <br /> <br /> 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.<br /> <br /> [code]<br /> metodo Principal<br /> 	* Pegar todos as categorias com id_pai = 0<br /> 	* Fazer loop de 0 ate o total de categorias encontradas<br /> 	* Pegar o id da categoria atual<br /> 	<br /> 	* chamar metodo Recursivo passando o id da categoria atual<br /> fim metodo<br /> <br /> metodo Recursivo<br /> 	* Pegar as categorias com id igual ao id passado como parametro<br /> 	* Se encontrar resultados<br /> 		* Fazer loop de 0 ate o total de resultados encontrados<br /> 		* Pegar o id da categoria atual<br /> 		* chamar metodo Recursivo com o id da categoria atual<br /> 	* fim Se<br /> fim metodo<br /> [/code]<br /> <br /> Note que dentro do metodo "Recursivo" eu chamo ele mesmo quantas vezes forem necesarias para processas os "n" niveis se subcategorias.<br /> <br /> 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 :)<br /> <br /> Rafael]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5004.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5004.java</link>
				<pubDate><![CDATA[Wed, 15 Jan 2003 01:35:04]]> GMT</pubDate>
				<author><![CDATA[ Rafael Steil]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ 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ê.<br /> A recursividade é bastante utilizada nos algoritmos de ordenação de listas e arrays, árvores entre outros.<br /> Mas como a Collection faz tudo isso pra vc...<br /> <br /> 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.<br /> <br /> Você está fazendo algum curso???<br /> Na universidade agente realmente vê a importância da recursividade. Você provavelmente vai se deparar com ela durante seu curso, caso esteja fazendo algum.<br /> <br /> E vamos a um pequeno exemplo.<br /> <br /> 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.<br /> <br /> 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.<br /> <br /> [code]<br /> public Connection getConnection&#40;&#41; &#123;<br />   Connection con = pool.firstElement&#40;&#41;;<br /> <br />   if &#40;con == null&#41; &#123; //se con == null, o pool está vazio e precisa criar uma nova conexao<br />     con = new DriverManager.getConnection&#40;...&#41;;<br />     return con;<br />   &#125; else if &#40;conexaoOk&#40;con&#41;&#41; &#123; //se a coneccao está funcionando, retorne-a<br />     return con;<br />   &#125; else &#123;//caso contrário, procure pela proxima conexao disponivel<br />     return getConnection&#40;&#41;;<br />   &#125;<br /> &#125;<br /> [/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5011.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5011.java</link>
				<pubDate><![CDATA[Wed, 15 Jan 2003 08:41:57]]> GMT</pubDate>
				<author><![CDATA[ Elvis.The.Pelvis]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ escrever a seria de fibonacci em DUAS linhas!<br /> <br /> [code]<br />   public int fibonacci &#40;int n&#41; &#123;<br />     if &#40;n == 1 || n == 2&#41; return 1;<br />     else return fibonacci&#40;n-1&#41; + fibonacci&#40;n-2&#41;;<br /> &#125;<br /> [/code]<br /> <br /> bacaaaaaaaana!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5035.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5035.java</link>
				<pubDate><![CDATA[Wed, 15 Jan 2003 11:11:07]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Ae, valew pelos exemplos e pelas lições!!!!!<br /> Só tenho uma pergunta? Se alguém experiente estiver lendo isso aqui, não exite em responder!!!<br /> <br /> 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!<br /> 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...<br /> 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...<br /> <br /> <br /> <br /> Ae se tem alguem que pode me ajudar nessa resposta fora do contexto apresentado. Sou muito grato!!!<br /> <br /> <br /> Valew]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5221.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5221.java</link>
				<pubDate><![CDATA[Thu, 16 Jan 2003 23:29:58]]> GMT</pubDate>
				<author><![CDATA[ Smurf (SBG)]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Engenharia eh mais voltado a hardware, redes.. Ciencias eh mais voltado a software, pesquisas.<br /> <br /> Rafael<br /> ps: programacao de jogos rulez]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5222.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5222.java</link>
				<pubDate><![CDATA[Thu, 16 Jan 2003 23:37:13]]> GMT</pubDate>
				<author><![CDATA[ Rafael Steil]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Ae, só mais uma questão!!!<br /> 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....<br /> <br /> Alguém tem alguma idéia aí? Ae valew  pela idéia dos cursos universitários!<br /> <br /> Falow!!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5224.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5224.java</link>
				<pubDate><![CDATA[Fri, 17 Jan 2003 00:08:38]]> GMT</pubDate>
				<author><![CDATA[ Smurf (SBG)]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Coloca um verificação...<br /> Quando o cara digitar espaço você espera a próxima letra. Esta não poderá ser um outro espaço.<br /> Se for, você o ignora...<br /> <br /> []s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/5244.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/5244.java</link>
				<pubDate><![CDATA[Fri, 17 Jan 2003 09:32:15]]> GMT</pubDate>
				<author><![CDATA[ diogompbr]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Caro amigo,<br /> <br /> Só mais um pequeno detalhe sobre recursão: se não for usada com coerência pode tornar o programa extremamente lento.<br /> <br /> 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.<br /> <br /> 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 ):<br /> <br /> [code]public long fibonacci &#40; long n &#41; &#123;<br />   long n1, n2, total;<br /> <br />   total = 1;<br />   n1 = 0;<br />   n2 = 1;<br /> <br />   for &#40; int i = 2; i &lt;= n; i++ &#41; &#123;<br />     total = &#40; n1 + n2 &#41;;<br />     n1 = n2;<br />     n2 = total;<br />   &#125; <br /> <br />   return total;<br /> <br /> &#125;[/code]<br /> <br /> 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...  :D]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/1103/6084.java</guid>
				<link>http://www.guj.com.br/posts/preList/1103/6084.java</link>
				<pubDate><![CDATA[Tue, 28 Jan 2003 19:26:41]]> GMT</pubDate>
				<author><![CDATA[ J2Alex]]></author>
			</item>
	</channel>
</rss>