user7258708:
En este caso el valor coincide y el valor de booleano se establece en true, sin embargo retorno se llama dos veces y pone al día el valor de false.Can alguien sugerir qué estoy perdiendo aquí ?.
public class BinSearch {
public static void main(String[] args) {
BinSearch bin=new BinSearch();
int arr[]= {2,4,6,8,10,12,14,16};
boolean b=bin.binSearch(arr,0,arr.length-1,12);
System.out.println("Number found "+b);
}
public boolean binSearch(int arr[],int low,int high,int val)
{
int mid=(low+high)/2;
if(arr[mid]==val)
{
return true;
}
else if(arr[mid]>val)
{
binSearch(arr,mid+1,high,val);
}
else
{
binSearch(arr,low+1,mid,val);
}
return false;
}
}
Óscar López :
Que se está perdiendo dos vueltas al llamar a la recursividad:
return binSearch(...);
Si usted no escribe ellos, el método ignorará el resultado de la recursividad y simplemente volver false
al final. Después de hacer eso, el último return
será innecesario y debe ser eliminado. Por último, es necesario comprobar el caso cuando low > high
, eso significa que no se encontró el elemento.