Java中用分治法求最大数

Java中用分治法求最大数,java,recursion,divide-and-conquer,Java,Recursion,Divide And Conquer,我试图用分治法(递归法)找到数组中的最大数。但是当我编译这段代码时,我得到了ArrayIndexOutOfBounds异常 我不确定我错在哪里。以下是我的代码片段: public class ... { int[] A = {2,4,5,1,6,7,9,3}; int max; public void solution() { max = findMax(0, A.length-1); //print max } private int findMax(i

我试图用分治法(递归法)找到数组中的最大数。但是当我编译这段代码时,我得到了ArrayIndexOutOfBounds异常

我不确定我错在哪里。以下是我的代码片段:

public class ... {
  int[] A = {2,4,5,1,6,7,9,3};
  int max;

  public void solution() {
    max = findMax(0, A.length-1);
    //print max
  }

  private int findMax(int a, int b){    
    if(b-a == 1){
        return A[a]>A[b] ? A[a] : A[b];
    }
    else if(a==b){
        return A[a];
    }

    return findMax(findMax(a, (a+b)/2), findMax((a+b)/2 +1, b));
  }

}

我认为这不是递归的最佳用法。然而,我认为这将更容易遵循。希望有帮助,干杯

public static int maxI(int[] x, i index){
  if (index > 0) 
  {
    return Math.max(x[i], maxI(x, i-1))
  } 
  else 
  {
    return x[0];
  }
}

问题出在您的最后一行:

return findMax(findMax(a, (a+b)/2), findMax((a+b)/2 +1, b));
这将使用
findMax()
方法的结果作为另一个
findMax()
调用的参数,这意味着它们将用作数组的索引。这将给您一个错误的结果,或导致出现
数组索引超出边界异常

您要做的是返回两个
findMax()
调用中的最大值:

return Math.max(findMax(a, (a+b)/2), findMax((a+b)/2 + 1, b));

什么线路?你试过使用调试器吗?这不是分而治之。它按顺序看。