If it does not find the value, it will return -1. For a large array, the statements in the loop will have to execute many times. The basic idea is that you divide the array into two subarrays, and compare the middle element to Value. Value is equal to the middle element. In this case, the element has been found and you are done.
Value is greater than the middle element.
Value is less than the middle element. In this case, if Value is in the array, it will be in one of the elements in the upper half of the array beyond the middle element. If Value is equal to the middle element, we are done. Otherwise, we perform a search on one of these subarrays, etc. As you can see, this function is naturally implemented using recursion, and the algorithm gets its name from the repeated halving of the array.