我有以下学校作业: 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());
}
}
答案 0 :(得分:2)
你几乎得到了它!以下是一些指示:
high/2
并不是真的。 (想想如果low
= 98且high
= 100会发生什么。)
当你递归时,你需要记住你传递的索引是包含,所以在第二次递归调用中,我建议你在较低的索引中添加1(这样它就不会#39; t与第一次递归调用的上层索引重叠)
如果您要我澄清任何一项,请告诉我。