查找最大子向量的递归方法

dat*_*ili 0 c++ algorithm

这是用于查找最大子向量和的递归代码

#include <iostream>
using namespace std;

int Max(int a,int b,int c){
    return max(a,std::max(b,c));
}
int a[]={31,-41,59,26,-53,58,97,-93,-23,84};
int n=sizeof(a)/sizeof(int);
int maximum3(int l,int u){
    if (l>u) return 0;
    if (l==u) return std::max(0,a[l]);

    int m=(l+u)/2;
    int lmax=0;
    int sum=0;
    int rmax=0;
    int sum1=0;
    for (int i=m;i>=l;i--){
        sum+=a[i];
        lmax=std::max(lmax,sum);
    }
    for (int j=m+1;j<u;j++){
        sum1+=a[j];
        rmax=std::max(rmax,sum);
    }

    return Max(lmax+rmax,maximum3(l,m),maximum3(m+1,u));
}

int main(){
    cout<<maximum3(0,n-1)<<"  ";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它重新运行155而其他非递归方法返回187请帮助

abe*_*nky 5

@ user466411:您在过去7个月内提出了274个问题,或者每天都提出大约一个问题.其中许多问题已经[已结束],获得了严重的负面投票[-5或更多],或两者兼而有之.

这种模式清楚地表明:
你需要重新思考如何处理编程.

  • 您需要学习使用调试器.
  • 您需要将大问题缩小到特定问题.
  • 您需要准确描述问题.
  • 在将它们组合成更大的元素之前,您需要测试代码片段.
  • 您需要尝试修复,观察效果,​​假设解决方案并测试它们.

总而言之,你编程错了.
大多数新程序员可以在不到7个月的时间内掌握初级编程,而无需每天手持.你需要重新编程,学习新的如何思考代码,或者你需要承认编程不适合你,你应该找到一个新的工作线.

(对于其他评论者:是的,我知道这个答案对这个问题没有回应,但是迫切需要说;请看我的另一篇文章,以获得响应性答案,试图引导海报找到解决方案)