我的代码应该使用递归的分而治之方法返回给定数组中的最大数字。
对于[1,3,2,4,6],我应该返回6。
由于某种原因,我的代码在第47行出现StackOverflowing
线程“主”中的异常java.lang.StackOverflowError 在maiordivisaoconquista.DivideAndConquer.Highest(DivideAndConquer.java:47)
public class DivideAndConquer {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner s = new Scanner (System.in);
int n = s.nextInt();
int a[] = new int [n];
for(int i = 0; i < a.length; i++)
{
a[i] = s.nextInt();
}
int first = 0;
int last = a.length;
System.out.println(Highest(a,first,last));
}
public static int Highest (int a[], int first, int last)
{
if(first == last)
{
return a[first];
}
if (last - first == 1)
{
return Math.max(a[first],a[last]);
}
else
{
int middle = (first +last)/2;
return(Math.max(Highest(a,first,last),Highest(a,middle+1,last)));
}
}
}
答案 0 :(得分: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)));
您的代码使用相同的first
和last
值进行调用,因此(通常)将无限递归。