Java HW StackOverflower错误,最大子数组伪代码复制自书本

Java HW StackOverflower错误,最大子数组伪代码复制自书本,java,stack-overflow,Java,Stack Overflow,我试图用直接从我的书中复制的伪代码实现一个递归的最大子数组问题。我不明白为什么我在1次递归后遇到堆栈溢出问题。这是我的密码 public class MaxSub { public int FindMaxCrossingSubArray(ArrayList<Integer> ar, int low, int mid, int high) { int maxLeft=0; int leftSum=Integer.MIN_VALUE;

我试图用直接从我的书中复制的伪代码实现一个递归的最大子数组问题。我不明白为什么我在1次递归后遇到堆栈溢出问题。这是我的密码

 public class MaxSub {


  public int FindMaxCrossingSubArray(ArrayList<Integer> ar, int low, int mid, int high)         
    {
    int maxLeft=0;
    int leftSum=Integer.MIN_VALUE;
    int sum=0;

    for(int i=mid; i>low; i--){


        sum= sum + ar.get(i);
        if(sum>leftSum){

            leftSum=sum;
            maxLeft=i;// counter
        }

    }   
        int rightSum=Integer.MIN_VALUE;
        sum=0;
        int MaxRight=0; 



        for(int j=mid+1; j<=high; j++){


            sum=sum+ar.get(j);
            if(sum>rightSum){
                rightSum=sum;
                MaxRight=j;
            }

        }
        System.out.println(maxLeft+MaxRight +"max crossing method");
        return maxLeft+MaxRight;


    }






 public int DivideAndConquerMaxSub(ArrayList<Integer> ar, int low, int high){


    if(low==high)//StackOverFlowError 

    return  0;

    else {

        int mid=(low+high/2);
        int leftSum= DivideAndConquerMaxSub(ar, low, mid);//StackOverFlowError 

        int rightSum= DivideAndConquerMaxSub(ar, mid+1, high);

        int crossSum= FindMaxCrossingSubArray(ar, low, mid, high);
        System.out.println(crossSum+ "divide method");
        if(leftSum>=rightSum &&leftSum>=crossSum )

            return leftSum;

        else if (rightSum>=leftSum&&rightSum>=crossSum)

            return rightSum;

        else
            System.out.println(crossSum+ "t");
            return crossSum;

    }

 }
然后在线

int leftSum= DivideAndConquerMaxSub(ar, low, mid);
在divideandconvertedmaxsub方法中

我的打印输出:

low : 0

high : 2000

1max crossing method

1divide method

1t



 Exception in thread "main" java.lang.StackOverflowError
    at MaxSub.DivideAndConquerMaxSub(MaxSub.java:54)
    at MaxSub.DivideAndConquerMaxSub(MaxSub.java:61)
    at MaxSub.DivideAndConquerMaxSub(MaxSub.java:61)
    at MaxSub.DivideAndConquerMaxSub(MaxSub.java:61) and so on. 

此行:int mid=(低+高/2);这是错误的。它应该是int-mid=(低+高)/2;看看这是否解决了问题

@Makoto不确定Makoto是否愿意发表评论?我肯定看到了其他东西,但我现在没有看到任何其他东西。很抱歉。 int mid = (low + high) / 2; int mid=(low+high/2); int mid = (low + high) / 2;