Вот элегантное однострочное решение, в котором используется алгоритм стека , хотя может потребоваться некоторое время, чтобы понять всю прелесть этой реализации.
const getSum = arr => (arr.length === 1) ? arr[0] : arr.pop() + getSum(arr);
getSum([1, 2, 3, 4, 5]) //15
По сути, функция принимает массив и проверяет, содержит ли массив ровно один элемент. Если false, он выталкивает последний элемент из стека и возвращает обновленный массив.
Прелесть этого фрагмента в том, что функция включает arr[0]
проверку для предотвращения бесконечного зацикливания. Как только он достигает последнего элемента, он возвращает всю сумму.