Stuck at a wrong answer


getting wrong answer i.e., -30.5 whereas it must be -20 can someone suggest what’s wrong

float MO2(int a,int b){
return (a+b)/2.0;

float MO3(int a,int b,int c){
return a+b+c-(max(a,max(b,c)))-(min(a,min(b,c)));

float MO4(int a,int b,int c,int d){
int MAX=max(a,max(b,max(c,d)));
int MIN=min(a,min(b,min(c,d)));
return (a+b+c+d-MAX-MIN)/2.0;

double findMedian(const vector &A,int m,const vector &B,int n){
if(m==0)return -1;
if(m%2==0)return (A[m/2]+A[m/2-1])/2.0;
else return A[m/2];

    if(m==1)return MO2(A[0],B[0]);
    if(m & 1) return MO2(A[m/2],MO3(A[m/2-1],A[m/2+1],B[0]));
    return MO3(A[m/2-1],A[m/2],B[0]);

else if(n==2){
    if(m & 1) {return MO3(max(A[m/2-1],B[0]),min(A[m/2+1],B[1]),A[m/2]);}
     return MO4(max(A[m/2-2],B[0]),min(A[m/2+1],B[1]),A[m/2],A[m/2-1]);

int idxA=(m-1)/2;
int idxB=(n-1)/2;

vector<int>::const_iterator first = A.begin() + idxA;
vector<int>::const_iterator last = A.begin() + (m-1);
vector<int> newA(first, last);

/*vector<int>::const_iterator first3 = A.begin() + 0;
vector<int>::const_iterator last3 = A.begin() + idxA;
vector<int> A2(first3, last3);*/

vector<int>::const_iterator first2 = B.begin() + idxB;
vector<int>::const_iterator last2 = B.begin() + (n-1);
vector<int> newB(first2, last2);

/*vector<int>::const_iterator first4 = B.begin() + 0;
vector<int>::const_iterator last4 = B.begin() + idxB;
vector<int> B2(first2, last2);*/

if(A[idxA]<=B[idxB]) {cout<<"IN";return findMedian(newA,m/2+1,B,n-idxB);}
else {cout<<"OUT";return findMedian(A,m/2+1,newB,n-idxB);}


double Solution::findMedianSortedArrays(const vector &A, const vector &B) {
// Do not write main() function.
// Do not read input, instead use the arguments to the function.
// Do not print the output, instead return values as specified
// Still have a doubt. Checkout for more details

int m=A.size();
int n=B.size();

return findMedian(A,m,B,n);
else return findMedian(B,n,A,m);