【问题标题】:Assistance writing a recursive function that sums a list of arrays in Java协助编写一个递归函数,该函数对 Java 中的数组列表求和
【发布时间】: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 当然不是。此语法无效。

标签: java recursion


【解决方案1】:

这是你想要做的吗?

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 (i < 0) { 
        return sum;
    }
    else {
        sum = sum + a[i];
        i = i-1;
        return sumHelper (a, i, 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));

}

结果:

显示数组内容的总和 清单 5:132.0 列表0:0.0 列表1:5.0 列表2:2.0 清单 3:4.0 list4: 3.0

【讨论】:

  • 差不多就是这样。显然,我试图通过递归和在 main 中调整 i 来混淆我的死亡,然后在这之上不必要地尝试在三个不同的地方调整 a 的长度。这非常有帮助!抱歉新人的问题!
  • 无论如何,Java 数组的长度是不可变的。 (你不能改变长度)。
【解决方案2】:

您放错了变量,a-1 而不是 i。 并且数组将从 0 索引开始,因此您需要添加元素直到 0 索引。

static double[] list0 = new double[] {};
        static double[] list1 = new double[] { 5 };
        static double[] list2 = new double[] { -3, 5 };
        static double[] list3 = new double[] { 2, -3, 5 };
        static double[] list4 = new double[] { -1, 2, -3, 5 };
        static double[] list5 = new double[] { 33, 44, 55 };
        public static void main(String[] args) {
            // TOsuDO Auto-generated method stub
            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));
        }
        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 (i == -1) {
                {
                    System.out.println("Added all the elements");
                    return sum;
                }
            }
            else {
                sum = sum + a[i];
                i = i-1;
                //a.length -1; // THIS LINE DOESN'T WORK
                return sumHelper (a, i, sum);
            }
        }

【讨论】:

    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 2021-07-15
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多