простая задачка,но что-то с рекурсией
ЗАДАЧА:реализуйте и экспортируйте по умолчанию функцию, которая работает следующим образом:
Дано неотрицательное целое число num. Складывать все входящие в него цифры до тех пор, пока не останется одна цифра.
Для числа 38 процесс будет выглядеть так:
3 + 8 = 11
1 + 1 = 2
Результат: 2
Примеры
addDigits(19); // 1
addDigits(38); // 2
addDigits(1259); // 8
Написал рекурсивную функцию,которая считает сумму, и если она двухзначная,то сумма передается в саму функцию. Вроде бы понятен каждый шаг, и все очевидно, но на некоторые числа он начинает выдавать "undefined". Вот говнокод:
var func = (numb) => {
var str_my = String(numb);
var summ = 0;
for(var i = 0; i < str_my.length; i++){
summ += Number(str_my[i]);
}
summ >= 10 ? func(summ) : return summ;
};
Буду рад любой помощи. Спасибо
Ответы (1 шт):
return надо ставить в двух местах. У вас происходила ошибка, потому что вы просто вызывали рекурсивную функцию, а не возвращали результат её работы.
Как работает код без второго return(там где вызов самой себя):
func(38);
function func(str) {
str_my = '38'
summ = 0
summ = 11
if (summ >= 10) { // summ больше или равняется 10, правда
// выполняется этот блок кода
func(summ); // вызвалась эта функция
} else {
return summ;
}
// функция ничего не вернула, return не сработал ни один, соответственно результат работы этой функции равен undefined
}
Мой вариант без тернарного оператора:
function recursiveFunc(str) {
str = String(str);
let sum = 0;
for (let i = 0; i < str.length; i++) {
sum += +str[i];
}
if (sum >= 10) {
return recursiveFunc(sum);
} else {
return sum;
}
}
Или ваш код:
var func = (numb) => {
var str_my = String(numb);
var summ = 0;
for(var i = 0; i < str_my.length; i++){
summ += Number(str_my[i]);
}
return summ >= 10 ? func(summ) : summ;
};