递归好难,真的好难!


int Max3(int a,int b,int c)
{
    a=(a>b? a:b);
    return (a>c? a:c);
}
int MaxSonSum(int A[],int left,int right)
{
    if(left==right)
    {
        return (A[left]>0? A[left]:0);
    }
    else if(left<right)
    {
        int mid=(left+right)/2;
        int lsum=0,rsum=0,msum=0;
        lsum=MaxSonSum(A,left,mid);
        rsum=MaxSonSum(A,mid+1,right);
        msum=0;
        int thisMSum=msum;
        for(int i=mid;i>=left;i--)
        {
           thisMSum+=A[i];
           if(thisMSum>msum)
           {
               msum=thisMSum;
           }
        }
        for(int i=mid+1;i<=right;i++)
        {
            thisMSum+=A[i];
            if(thisMSum>msum)
            {
               msum=thisMSum;
            }
        }
        return Max3(lsum,msum,rsum);
    }
}

有没有人可以给我解释一下这个过程吗?总是想不通,这个难道不会有多个返回值吗?
比如{1 2 -8 9 9 -3 -3},就变成{1 2 -8 9},{9,-3,-3},在然后就是{1,2}{-8,9},{9,-3},是这样吗,真的不懂QAQ

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

多个返回值?
先不说具体的逻辑到底是怎么个过程
我就问你,函数返回值是个int型,它是怎么返回多个返回值的?

函数的返回值类型要和函数类型保持一致,int类型只能返回一个整型数,int*类型可以返回一个数组,并且数组定义要加static延长其生命周期。。。