以递归方式查找数组元素的总和

时间:2015-03-08 21:51:13

标签: java recursion

我有以下学校作业: public static double sum(double [] a,int low,int high)

返回数组切片a [low:high]中所有数字的总和。

如果低>>高,它会抛出IllegalArgumentException。否则,它会检查是否 切片有1个项目。如果是,则返回该值。

如果切片有2个或更多项,则将切片分成2个相等的子项,计算总和 在2个subslices中,返回2个部分和的总和。 这就是我的想法: 我对递归非常不好,这就像我写的第一个递归代码。

public static  double sum(double [] a, int low, int high) throws Exception{
    if(low > high){
        throw new IllegalArgumentException();
    }
    else if(low == high){
        return a[low];  
    }   
    return sum(a, low, high/2) + sum(a, high/2, high);
}

我的回答有多远? 更新: 这是我执行的所有代码:

public class ArraySum {
    int low; 
    int high;
    double []list;


    public ArraySum(int lowIn, int highIn, double []listIn){
        low = lowIn;
        high = highIn;
        list = listIn;  
    }
    public double auxSum() throws Exception{
        return sum(list, low, high);
    }
    public static  double sum(double [] a, int low, int high) throws Exception{
        if(low > high){
            throw new IllegalArgumentException();
        }
        else if(low == high){
            return a[low];  
        }   
        return sum(a, low, (high+low)/2) + sum(a, (high+(low+1))/2, high);
    }
}

这是我的主要:

public class Main {

    public static void main(String[] args) throws Exception {
        double [] l = {1,2,3,4,5};
        ArraySum a = new ArraySum(0, 5, l);
        System.out.println("the sum is: " + a.auxSum());

    }
}

1 个答案:

答案 0 :(得分:2)

你几乎得到了它!以下是一些指示:

  • high/2并不是真的。 (想想如果low = 98且high = 100会发生什么。)

  • 当你递归时,你需要记住你传递的索引是包含,所以在第二次递归调用中,我建议你在较低的索引中添加1(这样它就不会#39; t与第一次递归调用的上层索引重叠)

如果您要我澄清任何一项,请告诉我。