给出数组
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);
//}
}
答案 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]));
}
}
}