I am implementing a binary search algorithm and my code is as shown bellow: 

    def binary_search(a, x):                                                                                                    
        left, right = 0, len(a)                                                                                                 
        if right == 0: return -1                                                                                                                                                                                                 
        if x < a[0] or x > a[-1]:                                                                                                   
            return -1                                                                                                           
        elif x == a[0]:
            return 0                                                                                                            
        elif x == a[-1]:                                                                                                            
            return right - 1                                                                                                    
        mid = right // 2                                                                                                        
        a_mid = a[mid]                                                                                                                                                                                                                     
        if x == a_mid:                                                                                                              
            return mid                                                                                                          
        elif x < a_mid:                                                                                                             
            return binary_search(a[left:mid], x)                                                                                
        elif x > a_mid:                                                                                                             
            idx = binary_search(a[mid+1:right], x)                                                                                  
            if idx == -1:                                                                                                               
                return -1                                                                                                           
            else:                                                                                                                       
                return mid + 1 + idx  

I tested it and cannot find any way to improve it by complexity. Someone suggested that I may "have used an incorrect base condition to terminate your loop" but I still cannot figure out where the problem lies. 

Could anyone please help? Thanks in advance.