Найти сумму всех элементов в массиве рекурсивно на языке 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);
    }
}   
Другие вопросы по тегам