Digital root computation with benchmarking
I think your algorithmic part is exceedingly verbose.  One of the nicenesses of Python is how it can lead to code that reads almost like English.  And for this particular problem, even leaving performance considerations aside, I think iteration is clearer than recursion.  So I would rewrite things as:

def digits_of(number):
    """Yields the digits of an integer."""
    while number &gt; 0:
        yield number % 10
        number //= 10

def digital_root(number):
    """Computes the digital root of an integer."""
    while number &gt; 9:
        number = sum(digits_of(number))
    return number


I'm pretty sure my 6 year old daughter could make sense of that last function with very little help.