Ir para conteúdo
Fórum Script Brasil
  • 0

Recursividade No Php


ppgsalomao

Pergunta

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;
        }
    }
}
?>

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

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:

<?php

function 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!

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui!!!

Bom, pelo menos, acho eu... vai alterando os valores ali onde tá o número 1 pra você ver como tá funcionando.

<?php

function 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! huh.gif

Link para o comentário
Compartilhar em outros sites

  • 0
smile.gif

mas pra q você tah usando essa funcao??

Eu ou o Pedro??? hehehe

Bom, 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!

Link para o comentário
Compartilhar em outros sites

  • 0

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!!!!

biggrin.gifblink.gifwacko.gif

Link para o comentário
Compartilhar em outros sites

  • 0
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!

Link para o comentário
Compartilhar em outros sites

  • 0
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... rolleyes.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Gustavo -

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 = 6

Calcular o fatorial de 4 (4!):

4! = 4 * 3 * 2 * 1 = 24

Calcular o fatorial de 5 (5!):

5! = 5 * 4 * 3 * 2 * 1 = 120

Continuando 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) = 1

Nesse ponto, a função retorna o valor 1. E temos

fatorial (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) = 24

Um 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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...