标题:有个问题请教一下
取消只看楼主
lili3499
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-6-12
结帖率:14.29%
已结贴  问题点数:10 回复次数:1 
有个问题请教一下
这样的一道题:给定由n个整数(可能为负整数)组成的序列a1, a2,…, an, 求该序列连续子段和的最大值。当所有整数均为负整数时定义其最大子段和为0。
这个程序我是从网上下的,运行结果是正确的,但是该递归函数有个地方无法理解,请高人指点:
#include<iostream>
using namespace std;
int MaxSubSum(int *a, int left, int right)
{ int sum =0;
 if (left==right)  sum= a[left] >0?a[left]:0;
 else  { int center = (left+right)/2;
            int leftsum  = MaxSubSum(a, left, center);
            int rightsum = MaxSubSum(a, center+1, right );
            int s1 =0;    int lefts =0;
            for (int i=center; i>=left; i--)
                {  lefts += a[i];    if (lefts >s1) s1= lefts; }
           int s2 =0;    int rights =0;
           for (int i=center+1; i<=right; i++)
                {  rights += a[i]; if (rights >s2) s2= rights;  }            
        sum = s1+s2;
        if (sum < leftsum) sum = leftsum;
        if (sum < rightsum) sum = rightsum;
       }
return sum; }
int main()
{
    int n,a[10000];
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    cout<<MaxSubSum(a,0,n-1);
    return 0;
}
递归函数执行到这句就无法理解了int leftsum  = MaxSubSum(a, left, center);
                                int rightsum = MaxSubSum(a, center+1, right );   这里程序是怎样运行的,怎样才能得到最大子段和的呢?
搜索更多相关主题的帖子: 网上 最大值 center include 
2016-08-04 11:53
lili3499
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-6-12
得分:0 
谢谢两位热心的版主!虽然问题还没有解决,我只是对该程序中的递归流程有疑问哦,不过还是很谢谢你们啦!
2016-08-05 15:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467529-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.535018 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved