我一直在尝试学习分而治之的算法,并且我想出了一些我认为使用java就可以工作的方法。该算法应该接受一个大小为n的数组,即基数为2的数组。它应该将数组划分为基数为4的情况,然后将这些基数相加在一起作为索引。然后,它将所有这些加在一起,得到整个数组的总和。下面是我到目前为止在java中所做的工作和我的错误。我至少在分而治之算法的正确轨道上吗?
引发异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at getSum.sumArray(getSum.java:17)
at getSum.sumArray(getSum.java:21)
at getSum.main(getSum.java:7)代码如下:
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));
}
}发布于 2013-02-19 15:31:26
您需要更改:
for(int i = first; first < last; i++){至:
for(int i = first; i < last; i++){当您仅递增last时,您会不断地比较i和i
正如@Some1.Kill.The.DJ所指出的,
sum应该是方法sumArray的一部分
https://stackoverflow.com/questions/14951864
复制相似问题