Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С помощью рекурсии найдите сумму элементов этого объекта. что не так?

ваном Ученик (208), на голосовании 1 год назад
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
С помощью рекурсии найдите сумму элементов этого объекта.

мое решение
let obj = {a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}};
let sum = 0;
function func(obj) {
for(let daff in obj) {
if(typeof obj[daff] == 'object') {
sum += obj[daff];

} else {
sum += daff;
}
}
return sum ;
}

(func ({a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}));
Голосование за лучший ответ
Максим Искусственный Интеллект (213341) 1 год назад
Здесь нет рекурсии. Рекурсия это когда функция вызывает саму себя. Вот пример:
n! = 1*2*3*4*...*n
И рекурсивное решение:
n! = n*(n-1)!
1! = 1
Николай Карнаушенко Мастер (1148) 1 год назад
В вашем решении есть несколько проблем. Вместо прибавления ключа daff к sum, нужно прибавлять значение obj[daff]. Также вы не использовали рекурсию для обработки вложенных объектов. Вот исправленный вариант вашей функции:

 let obj = {a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}; 

function func(obj) {
let sum = 0;
for(let daff in obj) {
if(typeof obj[daff] == 'object') {
sum += func(obj[daff]); // рекурсивный вызов для вложенных объектов
} else {
sum += obj[daff]; // прибавляем значение, а не ключ
}
}
return sum;
}

console.log(func(obj)); // Вывод: 45
Теперь функция обрабатывает вложенные объекты с помощью рекурсии и корректно суммирует значения элементов объекта.

Мой канал по WEB программированию - Заходим и подписываемся
ваномУченик (208) 1 год назад
Спасибо огромное.
Dlazder Мудрец (16917) 1 год назад
Рекурсия это когда функция вызывает сама себя изнутри. Я не вижу в твоем коде этого
Похожие вопросы