最大子序列递归

这是一个使用递归算法找出整型数组中最大子序列和的C++程序。通过不断将数组分为左右两部分,计算左右部分的最大子序列和,并结合中间元素找到全局最大子序列和。
摘要由CSDN通过智能技术生成
#include <iostream>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int makeSumMax(const int *,int,int);
int main(int argc, char** argv) 
{
int a[7]={-1,-4,19,-6,-8,90,-7};
int *ptr=a;
    cout<<makeSumMax(ptr,0,6);
return 0;
}
int makeSumMax(const int *ptr,int left,int right)
{
if(left==right)return ptr[left];

int center=(left+right)/2;

int maxLeft=makeSumMax(ptr,left,center);//左边最大值 ,和下面的一样她会伸到只剩两个数,比较她们的值和她们的和那个大,return回去。然后就慢慢的往上爬 。两边的maxleft和maxright是对应的在三个对比在return。paa爬。到了最上层就结束了。 


int maxRight=makeSumMax(ptr,center+1,right);//右边最大值 

int t_maxLeftHalf=0, maxLeftHalf=0;
for(int i=center;i>=left;i--)
{
t_maxLeftHalf+=ptr[i];
if(t_maxLeftHalf>maxLeftHalf)
{
maxLeftHalf=t_maxLeftHalf;
}
}//左半边最大的值就是maxleftHalf; 


int t_maxRightHalf=0, maxRightHalf=0;
for(int i=center+1;i<=right;i++)
{
t_maxRightHalf+=ptr[i];
if(t_maxRightHalf>maxRightHalf)
{
maxRightHalf=t_maxRightHalf;
}
}//右半边最大的值就是maxleftHalf; 

int maxHalf= maxLeftHalf+maxRightHalf;

 

int max=(maxHalf>maxLeft)?maxHalf:maxLeft;
if(max>maxRight)return max;
else return maxRight;


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值