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

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

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
	}
}
2 лайка

Добрый день. А как быть если массив сложный (с несколькими вложениями)?
Как тогда должна выглядеть рекурсивная функция сложения всех элементов массива?

Создай новую тему пожалуйста с описанием условий и тем что уже пробовал(а) сделать, там и обсудим.

1 лайк

тема создана

Спасибо, очень подробно разжевано, как раз для новичка 😊

1 лайк