 # [Recursion] Build a function that sums AUTOMATICALLY ALL THE ELEMENTS in an array

Hey guys, thx for stopping by my question.
While studying [Replace Loops using Recursion] on the FCC tutorial,

An idea came up that I want to build a function using recursion that SUMS ALL THE ELEMENTS AUTOMATICALLY in an array.

So I tried with this one.

``````let multiArr = [1,2,3,4,5];
let n = multiArr.length;
console.log(n);// 5

function multiply(arr, n){
if( n <= 0 ){
return 1;
} else {
return arr[ n - 1 ] * multiply(arr, n - 1);
}
}
console.log(multiply(multiArr, n)) // 120

let newArr = [1,2,3,4,5,6];
let n2 = newArr.length; // 6
console.log(multiply( newArr, n2)); //720
``````

But As you can see, you have to set ‘n’ for each array which is kind of annoying …

So, how can I build a function using recursion that sums all the elements in an array without taking care of ‘n’?!..

Thanks in advance!! N is just an array length.
You can check it inside of a recursive function, multiply what you want and call function again if array is longer than one (or whatever you want).

Thx for your reply. I knew ‘n’ was an array.length. But I’ve implemented it in a wrong way.

I should have invoked the function like below.

``````let newArr = [1,2,3,4,5,6];
console.log(multiply( newArr, newArr.length)); //720
``````

But when I first created the function, I put ’arr.length’ like below ``````
function multiply(arr,  arr.length){
if( n <= 0 ){
return 1;
} else {
return arr[ n - 1 ] * multiply(arr, n - 1);
}
}

``````

Thx your reply.

you can use default parameters, since we declare `n` after `arr` it can be set to whatever things `arr` has, so no need to even pass the length of the array:

``````const multiply = (arr, n = arr.length - 1) =>
n === 0 ? arr : arr[n] * multiply(arr, n-1);

console.log(multiply([1, 2, 3, 4])); //24
``````

or if you don’t like arrow functions

``````function multi(arr, n = arr.length - 1) {
if(n === 0) return arr;
else return arr[n] * multi(arr, n-1);
}
console.log(multi([1, 2, 3, 4])); //24
``````
2 Likes

Thx for your detail reply!! It helped a lot !!!