Recursão

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é?