首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习分而治之算法

学习分而治之算法
EN

Stack Overflow用户
提问于 2013-02-19 15:18:17
回答 1查看 7.7K关注 0票数 0

我一直在尝试学习分而治之的算法,并且我想出了一些我认为使用java就可以工作的方法。该算法应该接受一个大小为n的数组,即基数为2的数组。它应该将数组划分为基数为4的情况,然后将这些基数相加在一起作为索引。然后,它将所有这些加在一起,得到整个数组的总和。下面是我到目前为止在java中所做的工作和我的错误。我至少在分而治之算法的正确轨道上吗?

引发异常:

代码语言:javascript
复制
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)

代码如下:

代码语言:javascript
复制
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));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-19 15:31:26

您需要更改:

代码语言:javascript
复制
for(int i = first; first < last; i++){

至:

代码语言:javascript
复制
for(int i = first; i < last; i++){

当您仅递增last时,您会不断地比较ii

正如@Some1.Kill.The.DJ所指出的,

sum应该是方法sumArray的一部分

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14951864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档