При значении 555 должно вернуть 6, путем складывания цифр в числе, если их больше 1
Как работает этот алгоритм, почему эта формула нам при любом числе выведет правильный результат?
функция с вопроса при n = 0 возвращает 0. Потому что -1 % 9 = -1 + 1 = 0
Согласно классическому определению, остаток всегда неотрицателен и лежит в пределах от нуля (включительно) до делителя (невключительно). И если у Вас остаток может быть отрицательным - то это частная особенность некоего языка программирования.
AgentSmith, опять же - классически операция деления с остатком определена только для целых либо натуральных чисел. Показанный алгоритм работает в случае натуральных чисел.
суть в том, что сумма цифр числа по модулю 9 всегда равна самому числу по модулю 9.
это доказывается тривиально - в сумме цифр каждая позиция входит 1 раз, а в самом числе - (10^k) = (99..9 + 1) = (9n+1) раз, и вот это 9n пропадает, если брать остаток от деления на 9.