在 Java 中使用分而治之找到最大数
Finding the max number with Divide and Conquer in Java
我正在尝试使用分而治之法(递归)查找数组中的最大数。但是当我编译这段代码时,我遇到了 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()
调用的参数,这意味着它们将用作数组的索引。这会给你一个错误的结果或导致 ArrayIndexOutOfBoundsException
.
您想做的是 return 两个 findMax()
调用中的最大值:
return Math.max(findMax(a, (a+b)/2), findMax((a+b)/2 + 1, b));
我正在尝试使用分而治之法(递归)查找数组中的最大数。但是当我编译这段代码时,我遇到了 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()
调用的参数,这意味着它们将用作数组的索引。这会给你一个错误的结果或导致 ArrayIndexOutOfBoundsException
.
您想做的是 return 两个 findMax()
调用中的最大值:
return Math.max(findMax(a, (a+b)/2), findMax((a+b)/2 + 1, b));