Задача из codewars на digital root. Выдаёт правильный результат, но не засчитывает решение

Есть задача на codewars: Digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of n. If that value has more than one digit, continue reducing in this way until a single-digit number is produced. The input will be a non-negative integer.

Я решил её таким кодом:

function digitalRoot(n) {
  n = n.toString().split('').map((num) => Number(num));
  
  n = n.reduce((previous, current) => previous + current, 0);
  /* console.log(n); */
  if (n < 10) {
    return n;
  } else if (n >= 10) {
    digitalRoot(n);
  }
}

digitalRoot(16);
console.log('------');
digitalRoot(942);
console.log('------');
digitalRoot(132189);
console.log('------');
digitalRoot(493193);

Ответы на примеры верные, но задача не засчитывается. Пишет expected undefined to equal 6. Я заменил if else на ? и всё заработало:

return n > 10 ? digitalRoot(n) : n;

Можете пожалуйста объяснить, где ошибка в if else?


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

Автор решения: Алексей Шиманский

Ответ ожидал получить число. Однако при else if (n >= 10) { финальный стек никуда ничего не вернёт (точнее вернёт undefined)... нужен return digitalRoot(n); . В тернарнике это вполне себе происходит.

→ Ссылка