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