Найти сумму всех элементов в массиве рекурсивно на языке Java
Вот мой код:
public int sum(int[] array, int index)
{
//int index is the number of elements in the array.
//Here is my base case:
if (index == 0)
return 0;
//Now it's time for the recursion
else
return array[index] + sum(array, index + 1);
}
Я продолжаю получать ошибку "вне границ", но я не понимаю, что я делаю неправильно.
5 ответов
Ваше базовое состояние неисправно. Так должно быть:
if (index == array.length)
Обратите внимание, вам нужно пройти index = 0
по первому звонку. Если вы проходите index = array.length - 1
, затем сохраните базовый вариант как есть и измените вызов рекурсивного метода на передачу index - 1
, вместо index + 1
,
Тем не менее, вам действительно нужна рекурсия? Я бы серьезно подумал об этом, прежде чем обратиться к рекурсии, а не к циклу для этой задачи.
Пытаться,
public static void main(String[] args){
int arr[] = {3, 4, 6, 7};
System.out.println(sum(arr, arr.length-1));
}
public static int sum(int[] array, int index) {
if (index == 0) {
return array[0];
} else {
return array[index] + sum(array, index - 1);
}
}
Вместо того, чтобы перейти от 0 к самому высокому индексу, перейти от самого высокого индекса к 0, я сделал (индекс -1), потому что вы сказали, что индекс - это общее количество элементов, поэтому, если массив имеет 10 элементов, последний элемент имеет индекс 9
public int sum(int[] array, int index)
{
//int index is the number of elements in the array.
//Here is my base case:
if (index == 0)
return 0;
//Now it's time for the recursion
else
return array[index-1] + sum(array, (index - 1);
}
Если вы используете Java 1.8, вы можете сделать следующее
public int sum(int[] array)
{
return (int)array.stream().sum();
}
или даже
public int sum(int[] array)
{
return (int)array.sum();
}
@ Masud - в вашем коде есть логическая ошибка (я новичок в Java, извините, если я ошибаюсь).
return array[index] + sum(array, index - 1);
array[index]
получит ошибку "за пределами границ", так как индекс начинается с 0 - следовательно, это означает, что там не будет индекса. 'index - 1' будет работать. Кроме того, это изменит ваш базовый случай, чтобы он возвращал '0', поскольку возвращаемый массив [0] будет иметь добавленный массив [0] дважды и неверную сумму.
Это мой код:
public static int sumArrayRecursion(int array[], int n){
if (n == 0){
return 0;
}
else {
return array[n-1] + sumArrayRecursion(array, n-1);
}
}