Java 通过递归分治在数组中的最大数

Java 通过递归分治在数组中的最大数,java,arrays,recursion,methods,divide-and-conquer,Java,Arrays,Recursion,Methods,Divide And Conquer,我的代码应该使用递归分治方法返回给定数组中的最大数 对于[1,3,2,4,6],我应该返回6 由于某种原因,我的代码在第47行溢出 线程“main”java.lang.StackOverflowerr中出现异常 在maiordivisaoconquista.DivideAndConquer.Highest(DivideAndConquer.java:47) 公共类划分和征服{ /** *@param指定命令行参数 */ 公共静态void main(字符串[]args) { 扫描仪s=新的扫描仪(

我的代码应该使用递归分治方法返回给定数组中的最大数

对于[1,3,2,4,6],我应该返回6

由于某种原因,我的代码在第47行溢出

线程“main”java.lang.StackOverflowerr中出现异常 在maiordivisaoconquista.DivideAndConquer.Highest(DivideAndConquer.java:47)

公共类划分和征服{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args)
{
扫描仪s=新的扫描仪(System.in);
int n=s.nextInt();
int a[]=新的int[n];
for(int i=0;i
更改如下:

return(Math.max(Highest(a, first, last),   Highest(a, middle+1, last)));
                                    |
                                    |
                                    V
return(Math.max(Highest(a, first, middle), Highest(a, middle+1, last)));

您的代码使用相同的
first
last
值调用自身,因此(通常)将无限递归。

这将适用于无限循环,但现在我在线程“main”java.lang.ArrayIndexOutOfBoundsException中获得了一个数组越界:MaiordiSaoConquista.divideandConquest.Highest中的Exception:5(divideandconverge.java:37)在Maiordisaoconquista.divideandconverge.high(divideandconverge.java:47)在Maiordisaoconquista.divideandconverge.high(divideandconverge.java:47)在Maiordisaoconquista.divideandconverge.main(divideandconverge.java:29)在main方法中,应该使用int last=a.length-1;而不是last=a.length是数组中的元素数,但最后一个元素是[length-1],因此last=a.length-1
return(Math.max(Highest(a, first, last),   Highest(a, middle+1, last)));
                                    |
                                    |
                                    V
return(Math.max(Highest(a, first, middle), Highest(a, middle+1, last)));