public int recursiveBinarySearching(String[] array, String value, int l, int r) { @CodeLabel("header")
  if (array == null || value == null) { @CodeLabel("ifNull")
    return -1; @CodeLabel("invalid")
  }
  if (l > r || l < 0 || r >= array.length) { @CodeLabel("invalidIndex")
    return -1; @CodeLabel("invalidIndexReturn")
  }
  int mid = (l + r) / 2; @CodeLabel("installMidMarker")
  if (value.equals(array[mid])) @CodeLabel("checkFound")
    return mid; @CodeLabel("found")
  else if (value.compareTo(array[mid]) < 0) @CodeLabel("ifLess")
    return recursiveBinarySearching(array, value, l, mid - 1); @CodeLabel("continueLeft")

  return recursiveBinarySearching(array, value, mid + 1, r); @CodeLabel("continueRight")
}