Consider the following method, which implements a recursive binary search.
/\** Returns an index in arr where the value x appears if x appears
* in arr between arr[left] and arr[right], inclusive;
* otherwise returns -1.
* Precondition: arr is sorted in ascending order.
* left \>\= 0, right < arr.length, arr.length \> 0
*/
public static int bSearch(int[] arr, int left, int right, int x)
{
if (right \>\= left)
{
int mid \= (left + right) / 2;
if (arr[mid] \== x)
{
return mid;
}
else if (arr[mid] \> x)
{
return bSearch(arr, left, mid - 1, x);
}
else
{
return bSearch(arr, mid + 1, right, x);
}
}
return -1;
}
The following code segment appears in a method in the same class as bSearch.
int[] nums \= {0, 4, 4, 5, 6, 7};
int result \= bSearch(nums, 0, nums.length - 1, 4);
What is the value of result after the code segment has been executed?
A
1
B
2
C
3
D
4
E
5