题目描述:本题目要求用分治递归法求解,除了需要输出最大子段和的值之外,还需要输出求得该结果所需的递归调用总次数。
int count = 0;
int Max(int a, int b)
{
if(a > b) return a;
else return b;
}
int Maxsum(SeqList &L, int l, int r)
{
count ++;
int i, sum;
int leftsum, rightsum;
if(l == r)
{
if(L.data[l] > 0)
return L.data[l];
else
return 0;
}
else
{
int mid = (l + r) / 2;
leftsum = Maxsum(L, l, mid);
rightsum = Maxsum(L, mid+1, r);
int thissum1, sum1;
thissum1 = sum1 = 0;
for(i = mid; i >= l; i --)
{
thissum1 = thissum1 + L.elem[i];
if(thissum1 > sum1)
sum1 = thissum1;
}
int thissum2, sum2;
thissum2 = sum2 = 0;
for(i = mid+1; i <= r; i ++)
{
thissum2 = thissum2 + L.elem[i];
if(thissum2 > sum2)
sum2 = thissum2;
}
int midsum = sum1 + sum2;
sum = Max(leftsum, rightsum);
sum = Max(sum, midsum);
}
return sum;
}