public static void Main()
Console.WriteLine(FindElement(new int[] { }, 0));
Console.WriteLine(FindElement(new[] { 0 }, 0));
Console.WriteLine(FindElement(new[] { 0, 1 }, 1));
Console.WriteLine(FindElement(new[] { 0, 1, 3, 5 }, 2));
Console.WriteLine(FindElement(new[] { 10, 11, 13, 15, 2, 5, 7 , 8 }, 5));
Console.WriteLine(FindElement(new[] { 10, 11, 13, 15, 2, 5, 7 , 8 }, 15));
Console.WriteLine(FindElement(new[] { 10, 11, 13, 15, 2, 5, 7 , 8 }, 10));
Console.WriteLine(FindElement(new[] { 10, 11, 13, 15, 2, 5, 7 , 8 }, 13));
Console.WriteLine(FindElement(new[] { 10, 11, 13, 15, 2, 5, 7 , 8 }, 8));
static int FindElement(int[] arr, int element) {
return FindElement(arr, element, 0, arr.Length - 1);
static int FindElement(int[] arr, int element, int start, int end) {
if(arr[start] == element) {
} else if(arr[start + 1] == element) {
var halfPos = (int) ((end + start) / 2.0);
if(CanBeWithinRange(arr, element, start, halfPos)) {
return FindElement(arr, element, start, halfPos);
} else if(CanBeWithinRange(arr, element, halfPos + 1, end)) {
return FindElement(arr, element, halfPos + 1, end);
static bool CanBeWithinRange(int[] arr, int element, int start, int end) {
return element >= arr[start] && element <= arr[end] || (arr[start] >= arr[end] && (element >= arr[start] || element <= arr[end]));