Рекурсия - это функциональное наследие, поэтому использование ее в функциональном стиле дает наилучшие результаты.Там нет "отсутствует return
" ;в функциональном стиле return
нет особой необходимости, так как это побочный эффект, он не создает значения, его нельзя вызывать как функцию и его нельзя комбинировать с другими выражениями.Другие императивные выражения стиля, такие как переназначение / мутация div10 += 1
, также являются рецептом мигрени при рекурсивном использовании.
Ваша программа может быть значительно упрощена -
const numDigits = n =>
n < 10
? 1
: 1 + numDigits (Math .floor (n / 10))
console .log
( numDigits (1) // 1
, numDigits (22) // 2
, numDigits (333) // 3
, numDigits (999999999) // 9
)
Переменная count
все еще может использоваться, если вы предпочитаете.Это был бы практический шаг к обеспечению безопасности стека программы -
const numDigits = (n, count = 1) =>
n < 10
? count
: numDigits
( Math .floor (n / 10)
, count + 1
)
console .log
( numDigits (1) // 1
, numDigits (22) // 2
, numDigits (333) // 3
, numDigits (999999999) // 9
)