Hola amigos,
me he dispuesto a resolver algoritmos de este tipo, concretamente comparar dos vectores y mostrar en que posición difiere un dato el uno del otro.
Primero me he dispuesto a comparar si los dos son iguales o no con el siguiente código:
public static boolean sonIgualesDyV(int[] a, int[] b, int ini, int fin) {
if(fin - ini <= 1) {
if((a[ini] != b[ini]) || (a[fin] != b[fin])) {
return false;
} else {
return true;
}
} else {
int medio = (ini + fin)/2;
boolean resultadoAux = sonIgualesDyV(a,b, ini, medio);
boolean resultadoAux2 = sonIgualesDyV(a, b, medio+1, fin);
return (resultadoAux && resultadoAux2);
}
}
public static void main
(String[] args
) { // TODO code application logic here
int a[]={1,2,7,8,9,10};
int b[]={1,2,7,8,9,10};
if (sonIgualesDyV(a,b,0, a.length-1))
System.
out.
println("Los vectores son iguales"); else
System.
out.
println("Los vectores no son iguales"); }
A partir de aquí y viendo que discurre la lógica implementada he querido modificarlo para devolver un entero con la posición donde difiere un dato de un vector de otro, ejemplo:
a[]={0,1,2,3,4}
b[]={0,1,2,3,6}
Ambos difieren en la posición 4 con un valor distinto por arreglo.
El problema lo tengo con las llamadas recursivas para llamarse a sí mismas y resolver el problema, antes devolvía dos resultados con un boolean(resultadoAux y resultadoAux2), ahora para devolver dos datos int no se como hacerlo... supongo que tendré que crear una condición para evaluar una llamada recursiva u otra o devolver con un arreglo los dos resultados a la llamada de la función...
public static int sonIgualesDyV(int[] a, int[] b, int ini, int fin) {
if(fin - ini <= 1) {
if((a[ini] != b[ini])){
return ini;
} else if ((a[fin] != b[fin])){
return fin;
}
} else {
int medio = (ini + fin)/2;
int resultadoAux = sonIgualesDyV(a,b, ini, medio);
int resultadoAux2 = sonIgualesDyV(a, b, medio+1, fin);
}
return 0;
}
public static void main
(String[] args
) { // TODO code application logic here
int a[]={1,2,7,8,9,10};
int b[]={1,2,7,8,6,10};
System.
out.
println("Difiere en la posición: "+sonIgualesDyV
(a, b,
0, a.
length-1)); }
Saludos y muchas Gracias