这是我的测试分而治之的程序,但它给了我一个错误。我正朝着正确的方向前进?
public class getSum {
static int sum = 0;
public static void main(String[] args) {
int[] numbers = {2,2,2,2,2,2,2,2};
int amount = 0;
amount = sumArray(0,numbers.length,numbers);
System.out.print(amount);
}
public static int sumArray(int first, int last, int[] A){
int index = last - first;
if(index == 1){
return sum;
}else if(index <= 4 && index > 1){
for(int i = first; first < last; i++){
sum += A[i];
}
return sum;
}
return (sumArray(first, last / 2, A) + sumArray(last / 2, A.length, A));
}
}
这是错误 线程“main”java.lang.StackOverflowError中的异常 在getSum.sumArray(getSum.java:16)
我正在寻找一个简单的例子,它采用16的数组并将其分解为基本情况4.我无法完全理解如何吐出数组,然后再将其拆分。然后结合所有的分裂。
答案 0 :(得分:1)
无法完全理解如何吐出数组,然后再将其拆分。
使用递归可以做到这一点。
答案 1 :(得分:1)
你可以使用递归来分而治之。你不断在较小的数组上递归,直到你找到一个匹配,然后爬上recusion树。
例如:使用递归函数isIn(Number x,Array a)查找数组是否在数组中
Boolean isIn(Number x, Array a) {
n = a.size
if n==1 then return a[0]==x
else
return isIn(x, a[0:n/2]) or isIn(x,a[n/2:n])
}
你可以看到问题如何被分成两个较小的问题,依此类推,直到它达到停止条件为止= n == 1&#39;然后它开始在调用树上返回结果。 这是伪代码,您必须使这个概念适应您正在使用的编程语言