if (a[l] == k) return l;
else if (a[l] < k && k <= a[(l + r) / 2])
return binary_search(a, k, l, (l + r) / 2);
else if (a[(l + r) / 2] < k && k <= a[r])
return binary_search(a, k, ((l + r) / 2) + 1, r);
else return -1;