Dúvida código

Estou estudando para um concurso de TI, mas não entendi esse código

public static int segredo(int a) {
   if (a < 2) {
     return 0;
   } else {
     return segredo(a-2) + 1;
   }
}

OBS: essa essa parte fiquei sem entender if (a<2) {

segredo(int a)
if (a < 2)...

o método segredo recebe um inteiro chamado ‘a’.
Se ‘a’ for menor que 2, a função vai retornar 0


a < 2
a menor que 2


Alguns outros operadores que podem aparecer:

a > 2
a maior que 2


a <= 2
a menor ou igual a 2


a >= 2
a maior ou igual a 2

1 curtida

Isto é um método recursivo (que se chama a ele próprio) e para algumas pessoas é um conceito dificil de assimilar.

Vamos supor que em algum lugar era invocado segredo (6)

  • o metodo verifica que 6<2 é false então retorna segredo(6-2) + 1
  • para isso terá então de calcular segredo(4)
    • o metodo verifica que 4<2 é false então retorna segredo(4-2) + 1
    • para isso terá então de calcular segredo(2)
      • o método verifica que 2<2 é false então retorna segredo (2-2) + 1)
      • para isso terá então de calcular segredo(0)
        • o método verifica que 0<2 é true e retorna 0 como resulado desegredo(0)
      • desta forma ja pode retornar 0+1 como segredo(2)
    • desta forma já pode retornar 1+1 como segredo(4)
  • desta forma ja pode retornar 2+1 como segredo(6)

o método original recebe então 3 como resultado de segredo(6)