Bug recursividade

3 respostas
S

porque essa logica não dar certo?
quando ele chega no return, em vez de retornar ele vai para dentro do if sem passar pelo if e começa a incrementar a posicao que ta em zero ate chegar em 2?
quando chega em 2 ele retorna o texto2.

System.out.println(testeRecusivo("texto0", 2));
    
    }
    
    private String testeRecusivo(String texto, int posicao){
        
      String vetor[]={"texto1","_texto2_","_texto3"}; 
      
      texto+= vetor[posicao];   
      
    
      if (posicao >0){
          testeRecusivo(texto,(posicao-1));
      }
              return texto;
              
    
    }

3 Respostas

Rodrigo_Sasaki

Não é que ele vai “pra dentro do if sem passar pelo if”.

É que o método foi invocado dentro do if, depois que ele termina a execução, e vai voltando na pilha, ele volta aonde foi invocado, que no caso era dentro do if. Se você usar um depurador vai ver que a pilha diminui quando ele volta no if.

S

hun…
entendi.
valeu

maior_abandonado

hehehe...

eu não sei se entendi direito mas... o que você queria saber originalmente é por que que não retornou no final as stritns todas retornadas certo?

isso é por que você muda a referência do seu objeto que é chamada (estou falando da referência) texto, dentro do método abaixo, mas isso não muda o objeto de cima na pilha, você atribuiu a sua variável um outro objeto, mas não alterou o que foi passado, como o que é passado é uma referência e o método acima que chamou o de baixo na pilha mantem a referencia dele ao objeto, o objeto que ele aponta se mantem o mesmo.

para corrigir o seu problema mude a linha 13 do código que você colocou de

testeRecusivo(texto,(posicao-1));

para

texto = testeRecusivo(texto,(posicao-1));

a propósito, strings são "imutáveis" mas isso ja é outro assunto...

System.out.println(testeRecusivo("texto0", 2));  
         
       }  
         
       private String testeRecusivo(String texto, int posicao){  
             
         String vetor[]={"texto1","_texto2_","_texto3"};   
           
         texto+= vetor[posicao];     
           
         
         if (posicao >0){  
             testeRecusivo(texto,(posicao-1));  
         }  
                 return texto;  
                   
         
       }
Criado 28 de janeiro de 2013
Ultima resposta 28 de jan. de 2013
Respostas 3
Participantes 3