【发布时间】:2016-10-16 06:28:35
【问题描述】:
假设这是作业,我不知道为什么我不能使用标签“作业”,所以为了清楚起见,我将它写在这里。
我必须编写一个方法“int maximum(int[] a, int l, int r)”,它使用分而治之的方法在从 'l' 到 'r' 的数组 A 中找到最大值。 基本情况将是当 A 内部有一个元素时,因此如果 A.length == 1,则返回该元素。递归部分应该将数组分成两个子数组,从 A[l] 到 A[mid],从 A[mid+1] 到 A[r]。理论上我可以接受,但我不断收到 StackOverflowError,我不明白为什么。
public class Maximum {
public static void main(String[] args) {
int[] A = {0, 5, 281, 3, 9, 4, 88, 16, 17, 60};
int l = 0;
int r = A.length-1;
System.out.println("Maximum of the array: "+maxArray(A, l, r));
}
public static int maxArray(int[] A, int l, int r) {
//Assuming that the index of array is '0' and not '1', l is 0. Else, put 1.
if (A.length == 1) {
return A[l];
}
int mid = r/2;
int maxLeft = 0;
int maxRight = 0;
maxLeft = maxArray(A, l, mid); //Here is the StackOverflowError!
maxRight = maxArray(A, mid+1, r);
if (maxLeft < maxRight) {
return maxRight;
} else
return maxLeft;
}
}
【问题讨论】:
-
你不能写作业标签,因为作业是不允许的
-
@SmallLegend Homework is 是允许的,但它要求显示尝试的代码并明确指定问题。要求在没有任何代码的情况下完成作业的问题,以及包含代码但不是特定问题的问题都是题外话。
-
对我来说是个消息谢谢@Kayaman,我向Monok道歉
-
不用道歉,我们都是来教和学的。我也明白为什么我不能,所以谢谢@Kayaman
-
这很简单,不管“意图”如何,都可以问一个好问题。问题是家庭作业问题通常质量低下(典型的例子是一个只包含家庭作业的“问题”),但这并不意味着家庭作业问题本身对 SO 来说是题外话。