const int NOT_FOUND = -1; static int Find(int[] arr, int num) { if (arr.Length == 0) return NOT_FOUND; if (arr.Length == 1) return arr[0] == num ? 0 : NOT_FOUND; int m = arr.Length / 2; if (arr[m] == num) return m; int k = NOT_FOUND; if (arr[m] > num) k = Find(arr.Take(m).ToArray(), num); else { k = Find(arr.Skip(m).ToArray(), num); k = k == NOT_FOUND ? NOT_FOUND : (k + m); } return k; } static int NonRecursiveFind(int[] arr, int num) { int start = 0; int end = arr.Length - 1; while (start != end) { int m = (start + end) / 2; if (arr[m] == num) return m; if (arr[m] > num) end = m; else start = m; } return NOT_FOUND; }