def binary_search(items, desired_item, start=0, end=None,):
    
    """Standard Binary search program takes 
    
    Parameters:
    items= a sorted list
    desired_item = single looking for a match (groovy baby)
    start= int value representing the index position of search section
    end = end boundary of the search section; when end == start
    
    Returns:
    None = only returned if the desired_item not found in items
    pos = returns the index position of desired_item if found.
    """
    
    if end == None:
        end = len(items)

    if start == end:
        return None
#        raise ValueError("%s was not found in the list." % desired_item)

    pos = (end - start) // 2 + start

    if desired_item == items[pos]:
        return pos
    elif desired_item > items[pos]:
        return binary_search(items, desired_item, start=(pos + 1), end=end)
    else: # desired_item < items[pos]:
        return binary_search(items, desired_item, start=start, end=pos)