Хочу понять как работает алгоритм по вычислению цифрового корня
public int DigitalRoot(long n) => (int) (1 + (n - 1) % 9);
public int DigitalRoot(long n)
{
long sum = 0;
while (n > 0)
{
sum += n % 10;
n/= 10;
}
if (sum > 9) return (int)DigitalRoot(sum); else return (int)sum;
}
Есть две функции, выдающие абсолютно одинаковый результат для натуральных чисел. Однако первая написана не мной и очень хотелось бы понять почему это так работает?