Dúvida com Recursão

2 respostas
maruero
public class Numero {
	
	public Numero(){
	}
	
	public void recursivo( Integer i ){
		System.out.println("Antes: " + i );
		if( i > 0){
			i -= 1;
			this.recursivo( i );
		}
		System.out.println("Depois: " + i );
	}
	
	public static void main(String[] args) {
		Numero n = new Numero();
		//Numero n1 = new Numero();
		
		n.recursivo( 10 );
	}
}

Esse código dá a seguinte saida:
Antes: 10
Antes: 9
Antes: 8
Antes: 7
Antes: 6
Antes: 5
Antes: 4
Antes: 3
Antes: 2
Antes: 1
Antes: 0
Depois: 0
Depois: 0
Depois: 1
Depois: 2
Depois: 3
Depois: 4
Depois: 5
Depois: 6
Depois: 7
Depois: 8
Depois: 9

public class Numero {
	
	public int n = 10;
	
	public Numero(){
	}
	
	public void recursivo( Numero i ){
		System.out.println("Antes: " + i.n );
		if( i.n > 0){
			i.n -= 1;
			this.recursivo( i );
		}
		System.out.println("Depois: " + i.n );
	}
	
	public static void main(String[] args) {
		Numero n = new Numero();
		Numero n1 = new Numero();
		
		n.recursivo( n1 );
	}
}

Esse diferentemente do acima dá essa saida:
Antes: 10
Antes: 9
Antes: 8
Antes: 7
Antes: 6
Antes: 5
Antes: 4
Antes: 3
Antes: 2
Antes: 1
Antes: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0
Depois: 0

Ou seja, a caracteristica de empilhamento da recursão não está ocorrendo, eu sei que isso ocorre pq eu estou passando um “ponteiro” no paramentro, mas, no 1º código tbm é passado um “ponteiro”.

No tbm que no 1º código eu passasse para o método recursivo o tipo básico int o resultado seria o mesmo, está parecendo que o Integer tenta igualar o comportamentodo int, estou errado?

Preciso muito que esse segundo código se comporte da mesma forma que o de cima.

Alguem ai sabe como? Ao menos se eu pudesse clonar o objeto para passa-lo no paramentro, seria um quebra galho, mas já ajudava.

2 Respostas

gpd38

De uma olhada.
Esta aparecendo
10
9
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9
10

Espero que seja isso

public class Numero {
    
      public int n = 10;
      
       public Numero()
      {
      }
      
       public void recursivo( Numero i ){
         System.out.println("Antes: " + i.n );
      	
         if( i.n > 0){
            i.n --;
            this.recursivo( i );
         }
         System.out.println("Depois: " + ((i.n)++) );
      } 
      
       public static void main(String[] args) {
       
         Numero n = new Numero();
         Numero n1 = new Numero();
         n.recursivo( n1 );
      	 
      }
   }
gpd38

Ja com este outro so o valor 10 do DEPOIS que nao aparece
Fica assim:
10
9
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9

public class Numero2 {
   
       public Numero2(){ }
       
       public void recursivo( int i ){
         System.out.println("Antes: " + i );
         if( i > 0){
            i --; 
            this.recursivo( i );
            System.out.println("Depois: " + ((i)++));
         }
      }
      
       public static void main(String[] args) {
         Numero2 n = new Numero2();
       //Numero n1 = new Numero();
         n.recursivo( 10 );
      }
   }
Criado 18 de junho de 2007
Ultima resposta 19 de jun. de 2007
Respostas 2
Participantes 2