ppgsalomao Postado Junho 20, 2004 Denunciar Share Postado Junho 20, 2004 Fala gente,To com uma dúvida que tá me matando ...Como usar a recursividade no PHP ??Exemplo:<? function soma() { soma(); } ?> Ou seja ... chamar a função dentro dela mesma ???? Eu tentei da seguinte forma: <? function soma() { while($acum == 1) { $acum = 0; a função if(/*condição para que ela recursive*/) { $acum = 1; } } } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe_Lopes Postado Junho 21, 2004 Denunciar Share Postado Junho 21, 2004 Ih cara...não segredo acho...Supondo-se um script q liste arquivos...function listar_arquivos($path) { if arquivo{ imprimi na tela } elseif diretorio { Abre o diretorio e lista os arquivos de novo! listar_arquivos(); //lista os arquivos dakele diretorio } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ppgsalomao Postado Junho 21, 2004 Autor Denunciar Share Postado Junho 21, 2004 MAs aih é que tah ...Ele não chama novamente !! Ele no final não entra em um "Loop Forçado" ...Ele simplismente só executa mais uma vez !!O que eu preciso é que ele entre em um "loop forçado" !! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Error404 Postado Junho 21, 2004 Denunciar Share Postado Junho 21, 2004 Pra fazer isso você pode usar variáveis globais, pra que a função puxe variáveis de fora dela... de repente assim você consegue... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe_Lopes Postado Junho 21, 2004 Denunciar Share Postado Junho 21, 2004 Ou entaum passa a variavel como parametro do funcao... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 Não daria pra criar 2 funções separadas e chamar uma dentro da outra?Por exemplo, vou copiar a sua função... claro que teria que adaptar como ela vai chamar cada parâmetro, mas eu pensei em algo assim:<?phpfunction soma1() { while($acum == 1) { $acum = 0; a função if(/*condição*/) { $acum = 1; } }}function soma2() { while($acum == 1) { $acum = 0; a função if (/*condição para ela chamar a soma1()*/) { soma1(); $acum = 1; } }}?>Falou! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ffiction Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 não dá pra pegar algum exemplo de java?? seique nessa linguagem tem recursividade.. as vezes com um exeplo dela fica mais facil!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 Consegui!!!Bom, pelo menos, acho eu... vai alterando os valores ali onde tá o número 1 pra você ver como tá funcionando.<?phpfunction soma($x) { while ($x <= 10) { $x += 3; soma($x); } return $x;}echo soma(1);******* EDITANDO *******Ele simplismente só executa mais uma vez !!O que eu preciso é que ele entre em um "loop forçado" !! Não entendi essa parte! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe_Lopes Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 mas pra q você tah usando essa funcao?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 mas pra q você tah usando essa funcao?? Eu ou o Pedro??? heheheBom, se for pra mim, eu só queria ver se conseguia criar uma função que chamasse ela mesma durante a sua execução... a princípio, achei que fosse essa a dúvida do Pedro. Mas como a solução foi simples, acho que deve ser outra coisa... por isso editei aquele meu tópico.Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ffiction Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 engraçado.. testei aki e não ententi a logica do negócio... faça isso aki: <?php function soma($x) { while ($x <= 10) { $x += 3; soma($x); } return $x; } echo soma(1)."<br>"; echo soma(2)."<br>"; echo soma(3)."<br>"; echo soma(4)."<br>"; echo soma(5)."<br>"; echo soma(6)."<br>"; echo soma(7)."<br>"; echo soma(8)."<br>"; ?> porque os resultados saum semelhantes entre os numeros?? não deveria ser para cada numero diferente???me explica isso!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ppgsalomao Postado Junho 22, 2004 Autor Denunciar Share Postado Junho 22, 2004 Fala Illidan !!A resolução do while eu já tentei !!Mas tah dando erro no meu PC e na net !!Por isso perguntei !! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 Fala Illidan !!A resolução do while eu já tentei !!Mas tah dando erro no meu PC e na net !!Por isso perguntei !! Ahhh, tá... mas qual erro tá dando?/////////////////////////////ffiction,Esse resultado era esperado mesmo... você tem que ter em mente que, na primeira vez que o script encontrar a função return(), ele vai parar a execução da função e retornar o valor de $x. Então, naquele exemplo, quando que vai encontrar esse comando? Na primeira vez que a variável $x for maior que 10... e como ela vai aumentando de 3 em 3, vai retornar valores de 11 a 13 (isso se o valor inicial da variável for menor ou igual a 10). Entendeu?Até mais! Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Error404 Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 Fala Illidan !!A resolução do while eu já tentei !!Mas tah dando erro no meu PC e na net !!Por isso perguntei !! Ahhh, tá... mas qual erro tá dando?/////////////////////////////ffiction,Esse resultado era esperado mesmo... você tem que ter em mente que, na primeira vez que o script encontrar a função return(), ele vai parar a execução da função e retornar o valor de $x. Então, naquele exemplo, quando que vai encontrar esse comando? Na primeira vez que a variável $x for maior que 10... e como ela vai aumentando de 3 em 3, vai retornar valores de 11 a 13 (isso se o valor inicial da variável for menor ou igual a 10). Entendeu?Até mais! Abraços! Tá dando timeout no servidor...De repente esse seu loop forçado vai dar timeout sempre... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest - Gustavo - Postado Julho 8, 2004 Denunciar Share Postado Julho 8, 2004 Talvez o exemplo mais clássico relativo à recursividade seja o da função "fatorial". Calcular o fatorial de um número significa multiplicá-lo por todos os números menores do que ele até 1. Um caso especial é o fatorial de zero, que vale 1. E não existe fatorial de números negativos.Por exemplo, calcular o fatorial de 3 (representado matematicamente por 3!):3! = 3 * 2 * 1 = 6Calcular o fatorial de 4 (4!):4! = 4 * 3 * 2 * 1 = 24Calcular o fatorial de 5 (5!):5! = 5 * 4 * 3 * 2 * 1 = 120Continuando com um pouco dessa teoria, podemos calcular o fatorial de 4 da seguinte forma:4! = 4 * (3 * 2 * 1) = 4 * 3!E, da mesma forma, o fatorial de 5 pode ser calculado como:5! = 5 * (4 * 3 * 2 * 1) = 5 * 4!ou ainda:5! = 5 * 4 * 3!De uma forma geral, o fatorial de um número X é igual ao próprio número multiplicado pelo fatorial de X - 1, ou seja:X! = X * (X - 1)!Isso quer dizer que para calcularmos o fatorial de um número (exceto 1 e 0, já que 1! = 1 e 0! = 1), precisamos calcular o fatorial de números menores que ele.Uma função que calcule o fatorial pode (assim como muitas outras) ser codificada utilizando apenas estruturas de repetição. Mas como o assunto aqui é recursividade, vamos lá.<?php fatorial ($num) { if ($num <= 1) { return (1); } else { return ($num * fatorial ($num - 1)); } }?>Chamando a função "fatorial" utilizando zero ou 1 como parâmetro, ela vai retornar 1.Com qualquer outro número (maior que 1), ela vai retornar o valor do número multiplicado pelo valor do fatorial desse mesmo número subtraído de 1.Enquando esse número for maior do que 1, a função vai sendo chamada recursivamente. Quando a chamada for feita com o número 1, a função simplesmente retorna (sem chamar a si mesma), e o cálculo é realizado.Podemos ilustrar esse processo assim:fatorial (4) = 4 * fatorial (3)fatorial (3) = 3 * fatorial (2)fatorial (2) = 2 * fatorial (1)fatorial (1) = 1Nesse ponto, a função retorna o valor 1. E temosfatorial (2) = 2 * 1 (já que fatorial (1) já foi calculado)fatorial (3) = 3 * 2 (já que fatorial (2) já foi calculado)fatorial (4) = 4 * 6 (já que fatorial (4) já foi calculado)ou seja, fatorial (4) = 24Um erro muito comum ao utilizar recursividade é esquecer de ter uma condição de interrupção, ou seja, uma condição dentro da função para que ela pare de chamar-se a si mesma. Esse erro faz com que a função nunca retorne. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ppgsalomao Postado Julho 8, 2004 Autor Denunciar Share Postado Julho 8, 2004 Eu entendi Gustavo !!O problema é simplismente que ele não chega a rodar !!Eu consegui uma solução ... que é:do { $acum = "b"; if(condição para interromper) { $acum = "a"; }} while($acum == "b"); Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
ppgsalomao
Fala gente,
To com uma dúvida que tá me matando ...
Como usar a recursividade no PHP ??
Exemplo:
Ou seja ... chamar a função dentro dela mesma ???? Eu tentei da seguinte forma:Link para o comentário
Compartilhar em outros sites
15 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.