Сложение чисел из строки с помощью рекурсии

Всем привет! Помогите решить задачу плиз. Нужно сократить путем сложения в рекурсивной функции числа в строке до одного символа, например '57987'=5+7+9+8+7=36=3+6=9. Пробовал две разные функции, но они обе возвращают двузначное(в данном случае) число, то есть делают один проход и выплевывают результат. Как нужно улучшить код, или нужно написать что-то совершенно иное?

function sum(n) {
    if (n < 10) return n;
    return (n % 10) + sum(Math.floor(n / 10));
}
console.log(sum(57987));

function sum(n){
    n = `${n}`;
    if(n.length > 1){
        return +n[0] + sum(n.slice(1));
    }
    return +n;
}
console.log(sum(57987));


Ответы (1 шт):

Автор решения: entithat

Алгоритм такой:

  • Из числа делаем строку, суммируем её цыфры.
  • Если число больше двух знаков, то делаем это же снова.

function foo(n, sum=0) {
  if (n < 10) return n;
  for (const d of n+'')
    sum += +d;
  return foo(sum);
}

console.log(foo(5194));
console.log(foo(57987));

→ Ссылка