Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...