【发布时间】:2017-01-24 03:07:51
【问题描述】:
我正在尝试编写一个递归程序,将数组列表的总和相加。它需要使用辅助函数,如下所示。
我看不到我做错了什么,但我认为这与未能让程序在添加项目后从列表中删除项目有关。谁能帮帮我?
编辑: 让我用伪代码解释一下我的逻辑: 我想让程序识别数组列表中的项目并将其存储在双倍总和中。然后通过递归传递,我想通过遍历数组列表中的项目并将它们添加到 double sum 来不断重复这个过程。
public static double sum (double[] a) {
double sum = 0;
return sumHelper (a, a.length-1, sum); // TODO
}
public static double sumHelper (double[] a, int i, double sum)
{
if (a.length == 0) {
return sumHelper (a, a-1, sum);
}
else {
sum = sum + a[i];
i = i-1;
a.length -1; // THIS LINE DOESN'T WORK
return sumHelper (a, a-1, sum);
}
return sum;
}
public static void main (String[] args) {
double[] list0 = new double[] {};
double[] list1 = new double[] { 5 };
double[] list2 = new double[] { -3, 5 };
double[] list3 = new double[] { 2, -3, 5 };
double[] list4 = new double[] { -1, 2, -3, 5 };
double[] list5 = new double[] { 33, 44, 55 };
System.out.println("Display the sum of the array contents");
System.out.println ("list5: " +sum (list5));
System.out.println ("list0: " +sum (list0));
System.out.println ("list1: " +sum (list1));
System.out.println ("list2: " +sum (list2));
System.out.println ("list3: " +sum (list3));
System.out.println ("list4: " +sum (list4));
【问题讨论】:
-
递归在哪里?
-
您永远不会在 sumHelper 的 else 块中调用 sumHelper,因此不会发生任何递归
-
抱歉忘了包含递归行,我暂时将其删除以测试通过其他方式缩短数组的长度。它被编辑以再次包含它们。
-
另外,您将索引传递给助手,因此您根本不需要修改数组,只需更新索引和总和
-
a.length -1; // THIS LINE DOESN'T WORK当然不是。此语法无效。