Как рекурсивно найти сумму элементов массива

Все что можно описать циклом можно описть рекурсией. Все что можно выразить рекурсией можно описать циклом. Кто ищет сумму элемента массива через рекурсию, может найти решение ниже:

function summ(arr, sum) {
	sum = sum || 0
	if (arr.length) {
		return summ(arr, sum + arr.pop())
	} else {
		return sum
	}
}
1 симпатия

Спасибо за ответ! но без удаления никак?

Можно и без удаления. Но там уже станет вопрос производительности.

Что можно сделать чтобы оригинальный массив не изменялся?

1 симпатия

Не знаю, может копировать массив в новый массив?!

Да, это сработает.

1 симпатия

Спасибо

Подскажите пожалуйста, в чем у меня ошибка?
let asa = [1, 2, 3];
function sumArr(arr) {
if(arr == []){
return 0;
} else {
return arr[0] + sumArr(arr.slice(1));
}
}
console.log(sumArr(asa)); //6

все сработало)
спасибо

Есть ошибка в сравнении. Массивы сравниваются по ссылке. Поэтому сравнение любого массива с пустым массивом будет всегда false. (Пустой массив пересоздается на каждое сравнение)

Проверка на пустоту массива должна делаться через .length свойство. Собственно, как написано в посте.

А можно и не копировать.

function summ(arr, sum = 0, index = 0) {
	if (arr[index]) {
		return summ(arr, sum + arr[index], ++index)
	} else {
		return sum
	}
}
1 симпатия