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:
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); } } // 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)) else }
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...
Código
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; } // TODO code application logic here int a[]={1,2,7,8,9,10}; int b[]={1,2,7,8,6,10}; }
Saludos y muchas Gracias