2015-03-31 4 views
0

Я написал рекурсивную функцию для суммирования элементов в массиве. Я озадачен и смущен тем, как ведет себя следующая программа.Рекурсивная функция для добавления элементов в массив

public class Recursion{ 

private static int array[] = new int[]{4,6,7,2,3}; 

public static void main(String argv[]){ 

    int result = sum(0 , 5); 
    System.out.println("The result is "+result); 
    } 

    private static int sum(int number, int index){ 

    if (index==0){ 
     return 0; 
    } 
    return number + sum(array[index-1], index-1) ; 

    } 
} 

Вышеупомянутая программа возвращает 18 в качестве ответа. Может кто-то, пожалуйста, более подробно рассказать о вышеуказанной программе, как о том, где я ошибаюсь.

ответ

2

Как написано, дерево вызовов расширяется до:

sum(0, 5) 
0 + sum(3, 4) 
0 + 3 + sum(2, 3) 
0 + 3 + 2 + sum(7, 2) 
0 + 3 + 2 + 7 + sum(6, 1) 
0 + 3 + 2 + 7 + 6 + sum(4, 0) 
0 + 3 + 2 + 7 + 6 + 0 

sum(4, 0) удовлетворяет условию index==0 поэтому она возвращает 0. Она должна возвращать number, который будет 4.

if (index==0){ 
    return number; 
} 
1

Вы пропускаете первый элемент массива в своей сумме. Возвращение array[0], когда вы дойдете до конца рекурсии:

private static int sum(int number, int index){ 

    if (index==0){ 
     return array[0]; 
    } 
    return number + sum(array[index-1], index-1) ; 

    } 
1

Вы не добавляете значение из первой позиции в массиве.

Вместо:

if (index==0){ 
    return 0; 
} 

попытка возвращения array[index] или number вместо 0.