如何递归地添加随机数组的数字?

时间:2018-12-18 13:24:27

标签: java

给出数组

static int[] testArray = {8, -5, 22, 17, 4, 9, -12, 15, 23, 25};'

如何将所有值递归加在一起。我尝试了下面的代码,这当然是行不通的。它应该而且不是很合逻辑,因为我不知道如何称呼

static int[] testArray = {8, -5, 22, 17, 4, 9, -12, 15, 23, 25};

static int i = 0;
public static void reverse(int sum) {
    i = i+1;
    int sumNum = sum;

    //if ((n/10) != 0) {
    sumNum = sumNum + testArray[i];
    reverse(sum);
    //}
}

5 个答案:

答案 0 :(得分:5)

static int sumRecursive(int index) {
    if (index == testArray.length) {
        return 0;
    }
    return sumRecursive(index + 1) + testArray[index];
}

我们将索引作为参数传递给函数。在每次调用时,我们都会发送当前索引的值+ 1 。当我们到达末尾时,我们返回0(基本情况)。结果将添加到当前元素并返回。

初始呼叫为sumRecursive(0)

如果原始数组不是静态的,则还必须将数组作为参数传递。

答案 1 :(得分:2)

更多附录,因为这可能是一些家庭作业,并且您已经得到了直接的答案(通过将索引传递给递归方法)。

当然,这里的真正乐趣是考虑功能!

含义:而不是围绕整个数组或“全局”数组中的索引,而要传递“列表”。然后将结果折叠在一起,如here所示。

长话短说:非平凡的解决方案具有以下特点:

int sum(List<Integer> values) {
  if (values.size) == 0 return 0;
  return values.get(0) + sum(values.subList(1, values.size());

当然,Java并不真正适合此类编程,因为创建这些子列表并不完全适合此简单问题。

答案 2 :(得分:2)

我们为什么要递归执行此操作?如果没有很好的递归理由,请保持简单,下面的一行将对您的数组求和:

Arrays.stream(testArray).sum();

但是,如果这是一些测试任务,迫使您使用递归,那么我猜已经提供的其他答案是最好的选择,即:

public static int recursiveSum(int[] array, int index, int sum) {
    return index == array.length ? sum : recursiveSum(array, index + 1, sum + array[index]);
}

所有这些以及主要方法如下:

static int[] testArray = { 8, -5, 22, 17, 4, 9, -12, 15, 23, 25 };

public static void main(String[] args) {
    System.out.println(Arrays.stream(testArray).sum());
    System.out.println(recursiveSum(testArray, 0, 0));
}

public static int recursiveSum(int[] array, int index, int sum) {
    return index == array.length ? sum : recursiveSum(array, index + 1, sum + array[index]);
}

答案 3 :(得分:1)

如果您真的需要递归解决它,您可以做的一件事就是使用递归方法(将其称为 sumRecursive(array))有1个参数,其中包含数组的其余部分。 / p>

如果有数组:[1、2、3、4]。您调用sumRecursive([1, 2, 3, 4]),它用sumRecursive([2, 3, 4])调用sum,返回值为array[0] + *rest of the array*


但是,我真的不建议简单的求和是递归的,它效率低下并且更加复杂

答案 4 :(得分:1)

public class Recursion {

static int[] testArray = { 8, -5, 22, 17, 4, 9, -12, 15, 23, 25 };
static int i = 0;
static int sumNum = 0;

public static int reverse(int sum) {
    i++;
    sumNum = sumNum + sum;

    if (i < testArray.length) {
        reverse(testArray[i]);
    }
    return sumNum;
}

public static void main(String[] args) {

    if (testArray.length != 0) {
        System.out.println("Sum:" + Recursion.reverse(testArray[i]));
    }
}

}