Here's a Python version that uses a wrapper function to simplify the counter, as has been suggested by slebetman's answer — I write this only because the core idea is very clear in this implementation:
from functools import reduce
def single_digit(n: int) -> tuple:
"""Take an integer >= 0 and return a tuple of the single-digit product reduction
and the number of reductions performed."""
def _single_digit(n, i):
if n <= 9:
return n, i
else:
digits = (int(d) for d in str(n))
product = reduce(lambda x, y: x * y, digits)
return _single_digit(product, i + 1)
return _single_digit(n, 0)
>>> single_digit(39)
(4, 3)