¿Por qué es el retorno ejecuta dos veces

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 falseal final. Después de hacer eso, el último returnserá innecesario y debe ser eliminado. Por último, es necesario comprobar el caso cuando low > high, eso significa que no se encontró el elemento.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=197169&siteId=1
Recomendado
Clasificación