LiLou
Registrado: 02 Abr 2011 Mensajes: 3
| Publicado: 02/04/2011 7:13 am | | | Título: Recursividad con funciones tipo void |
| Holas. No entiendo muy bien como funciona una funcion recursiva del tipo void. Asi que agradecería que alguien me ayudara a comprenderlo. Tengo éste código que me reordena de una determinada manera los elementos de un vector. En la parte izquierda han de estar los elementos menores o igual que x, en la derecha, los que son mayores. Por ejemplo: v = {1, 10, 23, 15, 13, 8}; x = 8; Reordenado (una posibilidad) seria v = {1, 8, 13, 10, 23, 15};
| Código: | public void reorganize2(int[] v, int x){ reorganize2(v, x, 0, v.length); }
public void reorganize2(int[] v, int x, int left, int right){ if(left==right) //caso simple reorganize2(v,x,left,right); //no estoy muy seguro si he de poner esto else{ int m = (left+right)/2; //la mitad del vector if(v[m] <= x){ swap(v,m,left); //cambio el elemento v[m] por el de v[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; }
|
Según mi lógica, el código debería de funcionar, el problema está en que no sé como adaptarlo a una funcion del tipo void  |
|
LiLou
Registrado: 02 Abr 2011 Mensajes: 3
| Publicado: 03/04/2011 12:48 am | | | Título: |
| 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: ");
Pues no tenían mucho misterio las funciones void xD
Un saludo. |
|