public int binarySearch(int value, int[] array, int lowIndex, int highIndex) {
		if (value == 0)
			return -1;

		runCount++;
		if (lowIndex == highIndex) {
			if (value == array[lowIndex])
				return lowIndex;
			else
				return -1;
		}

		int midIndex = (lowIndex + highIndex) / 2;
		// System.out.println("Looking in ("+array[lowIndex]+","+array[highIndex]+") midIndex="+array[midIndex]);

		if (value < array[midIndex]) // in left half
			return binarySearch(value, array, lowIndex, midIndex - 1);
		if (value > array[midIndex]) // in right half
			return binarySearch(value, array, midIndex + 1, highIndex);
		if (value == array[midIndex])
			return midIndex;

		return -1;
	}