Java 递归查找数组元素的和
我有以下学校作业: 公共静态双和(双[]a,整数低,整数高) 返回数组片a中所有数字的总和[low:high] 如果low>high,则抛出IllegalArgumentException。否则,它会检查 该切片有1个项目。如果是,则返回该值 如果切片有2个或更多项,它将切片分成2个相等的子切片,计算总和 并返回2个部分和的和。 这就是我写的: 我对递归非常糟糕,这就像我写的第一个递归代码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
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,现在您已经足够接近了。看一眼。