private int find(int value, int lowerBound, int upperBound) {
		System.out.println("Searching between indexes " + lowerBound + " and " + upperBound);
		
		// Verify that both bounds are >= 0
		if(lowerBound < 0 || upperBound < 0){ return -1; }
		
		// Determine if the number is in first half or second half, recursively
		
		// If there is an even number of values, the upper bound is included in
		// the lower half. If there is an odd number of values, the upper bound
		// is the index directly in the middle of the values.
		
		// Split search indices
		int currentIndex = ((upperBound - lowerBound) / 2) + lowerBound;

		// Found value
		if(value == array[currentIndex]){
			System.out.println("Found value at index " + currentIndex);
			return upperBound;
		}
		// Value is in the lower half
		else if(value < array[currentIndex]){
			if(currentIndex == upperBound || currentIndex == lowerBound){ return -1; }
			return find(value, lowerBound, currentIndex);
		}
		// Value is in the upper half
		else{
			if(upperBound == currentIndex){ return -1; }
			return find(value, currentIndex, upperBound);
		}
	}