Foro de elhacker.net

Programación => Java => Mensaje iniciado por: LiLou en 2 Abril 2011, 01:12 am



Título: Recursividad con funciones void, ayuda
Publicado por: LiLou en 2 Abril 2011, 01:12 am
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
  1.    public int[] reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.length
  2.        if(left==right)
  3.            return reorganize2(v,x,left,right-1);
  4.        else{
  5.            int m = (left+right)/2;
  6.            if(v[m] <= x){
  7.                swap(v,m,left);
  8.                return reorganize2(v,x,left+1,right);
  9.            }else{
  10.                swap(v,m,right-1);
  11.                return reorganize2(v,x,left,right-1);
  12.            }
  13.        }
  14.    }
  15.  
  16.    public void swap(int[] v, int i, int j){
  17.        int tmp = v[i];
  18.        v[i] = v[j];
  19.        v[j] = tmp;
  20.    }

He probado a hacer ésto:
Código
  1.    public void reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.length
  2.        if(left==right)
  3.            reorganize2(v,x,left,right-1);
  4.        else{
  5.            int m = (left+right)/2;
  6.            if(v[m] <= x){
  7.                swap(v,m,left);
  8.                reorganize2(v,x,left+1,right);
  9.            }else{
  10.                swap(v,m,right-1);
  11.                reorganize2(v,x,left,right-1);
  12.            }
  13.        }
  14.    }
  15.  
  16.    public void swap(int[] v, int i, int j){
  17.        int tmp = v[i];
  18.        v[i] = v[j];
  19.        v[j] = tmp;
  20.    }
  21.  
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 :-\



Título: Re: Recursividad con funciones void, ayuda
Publicado por: LiLou en 3 Abril 2011, 10:51 am
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.