Não te esqueças que estás a chamar o método dentro do próprio método várias vezes. O return não termina todas as chamadas mas a actual.
Ok entendi isso tb pmlm, estou debugando aqui esse codigo que te passei veja so o que sai:
[code]public static void main(String[] args) {
int n = ff(4);
System.out.println(n);
}
public static int ff(int n){
//System.out.println(n);
if(n == 1){
return 1;
}
if((n % 2) == 0){
ff(n/2); // Tirei o return.
}
return ff((n - 1)/2) + ff((n+1)/2);
}
[/code]
1º ff(4)
2º ff(2)
3º ff(1) --> retorna 1 acaba essa chamada
Nao teria que voltar pra chamada de ff(2) ?
[code] if((n % 2) == 0){
ff(n/2); // Tirei o return.
}
return ff((n - 1)/2) + ff((n+1)/2); [/code]
Não porque esse 1 é o resultado da linha ff(n/2). Como esse resultado não está sendo atribuido a nada, vai “perder-se” e ele vai continuar no ff(4) em baixo onde esta o return
[quote=pmlm][code] if((n % 2) == 0){
ff(n/2); // Tirei o return.
}
return ff((n - 1)/2) + ff((n+1)/2); [/code]
Não porque esse 1 é o resultado da linha ff(n/2). Como esse resultado não está sendo atribuido a nada, vai “perder-se” e ele vai continuar no ff(4) em baixo onde esta o return[/quote]
Ueh ff(2) nesse caso nao esta empilhado?
Quer dizer entao que o return nesses casos vai servir pra empilhar a chamada atual né?