Search code examples
javascriptfunctionrecursionmethodsnumerical-methods

Recursively calculate the sum of an Array of integers in JavaScript


I wanted to write a JavaScript program to compute the sum of an array of integers Recursively.

Expected Results

Input: [1, 2, 3, 4, 5, 6]
Output: 21

I achieved the above results with this code:

function calculateSum(array) {
    if (array instanceof Array){
        if (!array.some(isNaN)) {
            var total = 0;

            array.forEach(function (value) {
                total += value;
            });

            return total;
        }
        return "Provide an Array with only Numeric Values";
    }

    return "Please provide an Array";
}

But I'm looking for a solution that uses Recursion.

EDIT: I started doing the above exercise to practice Recursion. I was having a hard time figuring that out. So, That's why I posted this. I'd be glad if you understood.

Thanks in advance.


Solution

  • To use recursion you simply need a base case and way to spilt the input into something smaller you can recurse with.

    The sum of an array of length 1 is just arr[0] right? So that's a plausible base case. With a larger array, the sum is one element plus the sum of all the others. So that's your other case: arr[0] + sum(everything else)

    Now you can write a simple function with just those two cases:

    let arr = [1, 2, 3, 4, 5, 6] 
    
    function add(arr) {
        if (arr.length == 1) return arr[0] // base case
        return arr[0] + add(arr.slice(1))  // recurse
    }
    console.log(add(arr))

    The idea is simple enough that you can express it as a one-liner:

    const add = (arr) =>  arr.length == 1 ?  arr[0] : arr[0] + add(arr.slice(1))
    console.log(add([1, 2, 3, 4, 5, 6] ))

    Of course, you might want better error checking, but this should get you started.