Хочу понять как работает алгоритм по вычислению цифрового корня

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;          
}

Есть две функции, выдающие абсолютно одинаковый результат для натуральных чисел. Однако первая написана не мной и очень хотелось бы понять почему это так работает?


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