Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归查找数组元素的和_Java_Recursion - Fatal编程技术网

Java 递归查找数组元素的和

Java 递归查找数组元素的和,java,recursion,Java,Recursion,我有以下学校作业: 公共静态双和(双[]a,整数低,整数高) 返回数组片a中所有数字的总和[low:high] 如果low>high,则抛出IllegalArgumentException。否则,它会检查 该切片有1个项目。如果是,则返回该值 如果切片有2个或更多项,它将切片分成2个相等的子切片,计算总和 并返回2个部分和的和。 这就是我写的: 我对递归非常糟糕,这就像我写的第一个递归代码 public static double sum(double [] a, int low, int h

我有以下学校作业: 公共静态双和(双[]a,整数低,整数高)

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

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

如果切片有2个或更多项,它将切片分成2个相等的子切片,计算总和 并返回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);
}
我离答案还有多远? 更新: 以下是iam执行的所有代码:

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());

    }
}

你差点就成功了!以下是几点建议:

  • high/2
    不太正确。(想想如果
    低值
    =98和
    高值
    =100会发生什么。)

  • 当您递归时,您需要记住您传递的索引是包含的,因此在第二个递归调用中,我建议您在较低的索引中添加1(这样它就不会与第一个递归调用的较高索引重叠)


如果你想让我澄清任何一项,请告诉我。

好吧,你试过运行你写的东西吗?谢谢你的回复,这是你的意思吗?返回和(a,低,(高+低)/2)+和(a,(高+(低+1))/2,高);你第一个答对了<代码>(高+低)/2。现在只需将
+1
附加到第二个:-)问题是该方法没有返回,它给了我一个错误。@CarlosLuis另外,作为一个单独的问题,您不需要编写
抛出异常。您不必声明一个方法可以抛出一个
IllegalArgumentException
,因为它不是一个选中的异常。@CarlosLuis,现在您已经足够接近了。看一眼。