Ir ao conteúdo
  • Cadastre-se
jagno

Lógica de programação - método

Recommended Posts

Oi gente , sou novo no java e to com uma dificuldade pra entender a lógica de 2 algoritmo que vi numa apostila , eu já sei a resposta do algoritmo , mas queria entender como funciona . 

 

public static void foo(int i) {

 if (i > 1) {

 foo (i/2);

 foo (i/2);

 }

 System.out.print("#");

}

exemplo foo valendo 4 , foo(4) , eu sei que da 7 , mas como ? alguem poderia me explicar ? por favor.



2)

int foo(int x) {

 if (x <= 1)

 return 0;

 return 1 + foo(x / 2);

}

foo(5) valendo 5 , a resposta seria 2.... queria entender como o metodo chega a 2.  As conta que faço no lapís não bate... 


são Dúvidas bobas  de lógica , mas to aprendendo e estudando e não basta só fazer  o código , ideal é entender ele...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@jagno

Boa noite.

Esses aí são métodos recursivos. Uma função é executada e chama ela mesma. O método vai se desenvolvendo como se fosse uma boneca russa.

 

Vou fazer o segundo exemplo que é mais fácil.

 

int foo(int x) {

 if (x <= 1)

 return 0;

 return 1 + foo(x / 2);

}

Substituindo x por 5. Passo 1:

int foo(5) {

 if (5 <= 1)  // condição falsa. ele vai para return 1 + foo(x / 2);

 return 0; 

 return 1 + foo(2); // 5/2 = 2

}

Aqui ele vai repetir o método foo(), mas já com o X valendo 2. Passo 2:

int foo(2) {

 if (2 <= 1) // condição falsa. ele vai para return 1 + foo(x / 2)

    return 0;

 return 1 + foo(1);  // 2/2 = 1

}

Agora X está valendo 1. Ele faz novamente o método foo(). Passo 3:

 

int foo(1) {

 if (x <= 1)  // condição verdadeira

    return 0;  // retorna 0

 return 1 + foo(x / 2);

}

 

No passo 3 a condição de retorno é satisfeita e ele para de entrar no método recursivo.

Agora é hora de somar os resultados do retorno, de traz para frente.

 

passo 3: retorna 0;
passo 2: retorna 0 + 1;
passo 1: retonna 1 + 1;

Resposta: 2

 

Veja mais sobre recursividade. 'foo' é uma palavra genérica, pode ser usada qualquer palavra em um método recursivo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh!!! agora entendi... muito obrigado!! O método ele para quando a condição é verdadeira...

 

Eu pensava que ele só rodava uma vez só  e somava com o foo e daria 3 kkkk Vou estudar mais recursividade .

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×