How to sum ArrayList <Integers> using recursion?

I want my method to summarize a list of integers using recursion and return this list.

Here is my attempt:

    public static int sumListRecursive(List<Integer> numbers) {
        if (numbers.isEmpty() == true ) {
            return 0;
        }
        else {
            System.out.println(numbers.get(0) + sumListRecursive(numbers.subList(1, numbers.size())));
            return numbers.get(0) + sumListRecursive(numbers.subList(1, numbers.size()));
        }
    }

And in my main method, I have this:

        List<Integer> numbers = new ArrayList<Integer>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        sumListRecursive(numbers);

And when I run the program, I get this in the console: 10 4 7 4 9 4 7 4

So what's wrong?

+4
source share
1 answer

I provided an explanation in code in the form of a comment. It should print the amount mainly after the completion of the recursive function. Casting a print statement to a recursive function causes the value to be printed to the console every time.

See the fix below:

 public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<Integer>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        //print the sum in here 
        System.out.println(sumListRecursive(numbers));


    }

    public static int sumListRecursive(List<Integer> numbers) {
        if (numbers.isEmpty() == true ) {
            return 0;
        }
        else {
            /* removed the print statement from here as it prints each time the function is called and else is executed. */
            return numbers.get(0) + sumListRecursive(numbers.subList(1, numbers.size()));
        }
    }
+3
source

Source: https://habr.com/ru/post/1617066/


All Articles