int bin_search(vector<int>::size_type l_idx, vector<int>::size_type r_idx, vector<int>& arr){
        int pivot = arr[0]; // (1)
        if(l_idx == r_idx){
            return min(arr[l_idx], pivot); // (2)
        }
        vector<int>::size_type mid_idx = (l_idx + r_idx) / 2;
        if(arr[mid_idx] < pivot){
            return bin_search(l_idx, mid_idx, arr); // (3)
        }
        else if(arr[mid_idx] > pivot){
            return bin_search(mid_idx+1, r_idx, arr); // (4)
        }
        else{
            return min(bin_search(l_idx, mid_idx, arr), bin_search(mid_idx+1, r_idx, arr)); // (5)
        }
    }
(1)将最左边的值单独拿出来作为后面向左搜索还是向右搜索的依据
(2)如果l_idx == r_idx,说明搜索到尽头,返回这个值和pivot中小的那个,防止[1,2,3,4,5]这种未旋转的情况
(3)分类讨论,如果中间值小于pivot,说明落在旋转后的右边区域,右边不用再搜索了
(4)如果中间值大于pivot,说明落在旋转后的左边区域,左边不用再搜索了
(5)相等左右都搜索防止[4,3]只有两个值的这种情况