【问题标题】:Make program to add all numbers in array制作程序以将数组中的所有数字相加
【发布时间】:2020-03-11 03:22:58
【问题描述】:
    public static int add(int [] arr , int index){
      int count=0;

      if(arr.length == index)
        return count/arr.length;

      if(index< arr.length)
        count+=arr[index];

      return count + add(arr,index+1);

    }

所以问题是我想要这段代码添加数组中的所有数字,但这段代码无法正常工作,有人可以帮我解决这个问题吗?

【问题讨论】:

  • 欢迎来到 Stackoverflow!你能分享更多关于正在发生的事情吗?您收到错误消息了吗?
  • 当您说代码“无法正常工作”时,您是什么意思?您是否收到编译器错误、错误结果或其他问题?请提供一些详细信息,说明您已尝试过什么、您预期会发生什么以及实际发生了什么。这是一个起点。您的第一个参数的名称是什么?这在函数中的什么地方使用?这是另一个起点 - 如果要将数组中的所有元素相加,可能需要使用某种循环。
  • 你好,代码没有错误,所以我会先解释所有代码,几分钟前,我试图运行这段代码,但他返回错误的结果,例如我有数组 { 50,50,80},结果是 180,是的,它将所有数字相加,但代码没有将结果除以 arr.length,谢谢之前
  • 你确定你已经运行了你发布的代码吗?看看我的出发点。这是另一个 - 您不需要 return return 结果。只需要一次退货。两次返回应该给出编译器错误。另外,你怎么称呼它?如果您将数组的长度作为第二个参数传递,该函数将 return return 0 - 忽略不匹配的变量名称问题(这可能不会是所有元素的总和) .简而言之,请提供一些细节,以便我们为您提供帮助。请记住,我们看不到您的屏幕。
  • 所以我期望代码将返回将所有数字相加并除以arr.length,参数是arr(对不起,您必须将数组更改为arr),并且索引始终为0,你知道怎么用for之类的循环来加除,但是我想用递归,不好意思,最后返回应该是return count+ add(arr,index+1)。

标签: java arrays recursion


【解决方案1】:

有几种方法可以编写递归函数。一种常见的方法是

  1. 使用累加器来携带(累加)中间值。
  2. 使用“引导程序”函数来启动它。

参考我的示例,recursiveAdd 函数只是将整数列表进行平均。然后该函数使用正确的初始值调用递归函数 - index = 0 和 accumulator = 0。

自下而上看递归函数,它用数组调用自身,并将索引递增到下一个元素。它还传递了累加值+当前元素的值。

递归函数_add 所做的第二件事(实际上是第一件事)是检查我们是否已经到达列表的末尾。如果我们有,它会将累加器(它将保存数组中每个元素的总和)返回到“引导函数”recursiveAdd,其中结果将除以数组的长度以计算平均值和将该结果返回给调用者。

一些笔记。由于您要除以列表中的元素数,您可能希望使用 double 作为引导函数的返回类型(而不是 int)(例如,如果您的数组是 {1, 1, 0} )。还要考虑如果数组中有大量元素会发生什么。

public class RecursiveAdder {

    public static void main(String [] args) {
        int  [] x = { 1, 2, 3};
        int [] y = { 10, 20, 30, 40};
        System.out.println(recursiveAdd(x));
        System.out.println(recursiveAdd(y));

    }

    public static int recursiveAdd(int [] x) {
        return _add(x, 0, 0) / x.length;
    }

    public static int _add(int x [], int index, int accumulator) {
        if (index == x.length) {
            return accumulator;
        }

        return _add(x, index+1, x[index] + accumulator);
    }
}

FWIW,您的示例仅将最后一个元素除以数组的长度。即使那样,它也不是将最后一个元素的值除以长度,而是将 count 除以长度,并且 count 刚刚初始化为零。所以你的函数只是为最后一个元素返回 0。

可能还有其他一些问题,但这是最明显的问题。如果您发布一些您使用的数据和获得的结果的实际示例,这会容易得多 - 而不是期望其他人为您创建它们。

查看How to ask a good question 获取一些提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2016-09-21
    • 2016-04-06
    • 2014-05-15
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多