Dúvida Recursão

4 respostas
J

Boa tarde, pessoal.

Gostaria de entender um problema de recursão.

if(indice2<=vetor.size()-1)
		{
			
			while(indice1<=vetor2.size()-1)
			{
				vetorResultado[indice2] = vetorPadrao[indice1];
				metodoRecursivo(vetorPadrao, indice1++, vetorResultado, indice2+1);
			}

		}
		else{
			variavel++;
		}

Neste código, eu verifiquei que o índice2, é incrementado até o indice2 é incrementado até a condição de chamada de recursão (cai no else) é feito, mas o indice1 não é incrementado, fica em 0, só o indice2 fica incrementando (vi isso pelo DEBUG).
Aí cai no else, diminui um número no indice2, isto é, se ele caiu fora quando tava valendo 5, quando cai no else, ele volta para o 4, aí incrementa o indice1.

Então:
indice1 = 0
indice2 = 5
Caiu no else…
indice1 = 1
indice2 = 4

Está certo, na recursão ele “volta” na última chamada, ok…Mas, pq dps quando voltou o indice1 está 1?
Qual diferença entre o “++” e o “+1” numa chamada Recursiva?

Ficou meio complicado de explicar, mas espero que tenham entendido.

Obrigado!!!

4 Respostas

dreampeppers99

Depende de qual escopo é indice1, onde é declarado no corpo do método ou como membro da classe?

J

Ambas variáveis (indice2, indice2) são declaradas no método que chama a recursão.
Então, cria as variáveis no método, chama o método que é recursivo passando por parâmetro elas…

J

Alguém? :frowning:

WellingtonRamos
jrlicks:
Alguém? :(
Neste caso, a variável indice1 será o valor antes do incremento a ser passado para o método. Em seguida ela é incrementada e esse será seu valor novo. Já para a variável indice2, será passado o valor atual dela mais 1, porém, seu valor atual permanecerá inalterado.
//Testando incremento por ++
class Teste {
    public static void main(String[] args) {
        int var = 0;
        metodo(var++);
        System.out.println("Valor atual de var: " + var);
        
    }
    
    private static void metodo(int var) {
        System.out.println("Valor de var passado ao método: " + var);
    }
}
//Testando incremento por +1
class Teste {
    public static void main(String[] args) {
        int var = 0;
        metodo(var+1);
        System.out.println("Valor atual de var: " + var);
        
    }
    
    private static void metodo(int var) {
        System.out.println("Valor de var passado ao método: " + var);
    }
}
Os resultados para cada teste serão:
//Primeiro teste:
Valor de var passado ao método: 0
Valor atual de var: 1

//Segundo teste:
Valor de var passado ao método: 1
Valor atual de var: 0
Entretanto, isso só fará mesmo diferença se a variável for utilizada posteriormente. Caso contrário, onde está indice2+1 poderia ser facilmente trocado por ++indice2.
Criado 1 de maio de 2011
Ultima resposta 2 de mai. de 2011
Respostas 4
Participantes 3