Recursividad con funciones void, ayuda

Iniciado por LiLou, 2 Abril 2011, 01:12 AM

0 Miembros y 1 Visitante están viendo este tema.

LiLou

Buenas.

Tengo un código que me reordena un vector de una determinada manera, en la mitad izquierda, estarán los numeros menores o iguales que x, y por la derecha, los que son mayores que x.
Por ejemplo: v = {1, 10, 23, 15, 13, 8}; x = 8;
Reordenado (una posibilidad) seria v = {3, 1, 8, 10, 23, 15};

Sé hacerlo si digo que la funcion retorne un array, pero no sé hacerlo sin que retorne nada.

Código (java) [Seleccionar]
   public int[] reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.length
       if(left==right)
           return reorganize2(v,x,left,right-1);
       else{
           int m = (left+right)/2;
           if(v[m] <= x){
               swap(v,m,left);
               return reorganize2(v,x,left+1,right);
           }else{
               swap(v,m,right-1);
               return reorganize2(v,x,left,right-1);
           }
       }
   }

   public void swap(int[] v, int i, int j){
       int tmp = v[i];
       v[i] = v[j];
       v[j] = tmp;
   }


He probado a hacer ésto:
Código (java) [Seleccionar]

   public void reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.length
       if(left==right)
           reorganize2(v,x,left,right-1);
       else{
           int m = (left+right)/2;
           if(v[m] <= x){
               swap(v,m,left);
               reorganize2(v,x,left+1,right);
           }else{
               swap(v,m,right-1);
               reorganize2(v,x,left,right-1);
           }
       }
   }

   public void swap(int[] v, int i, int j){
       int tmp = v[i];
       v[i] = v[j];
       v[j] = tmp;
   }

Pero no funciona.
No he hecho muchos ejercicios de recursividad con funciones void (he hecho solo uno, pero apenas lo entiendo), asi que agradecería que me alguien me lo explicase  mas o menos :-\


LiLou

Solucionado.

El problema, como ya me temía, era el caso simple.
No debería de volver a llamar a la función, sino finalizar con un print, por ejemplo: println("\nReorganized: ");


Un saludo.