RECURSIVE функция, которая будет суммировать цифры ввода

Попытка написать кусок кода, который будет суммировать цифры числа. Также я должен добавить, что я хочу, чтобы программа продолжала суммировать цифры, пока сумма не станет только 1 цифрой.

Например, если вы начинаете с 1969 года, сначала нужно добавить 1+9+6+9, чтобы получить 25. Поскольку значение 25 имеет более одной цифры, необходимо повторить операцию, чтобы получить 7 в качестве окончательного ответа.

Мне было просто интересно, как я могу это осуществить и, возможно, сделать это рекурсивным. Это то, что я до сих пор

def sum_digits3(n):
     r = 0
     while n:
         r, n = r + n % 10, n // 10
     return r   

2 ответа

Решение

Конвертируйте туда и обратно между строками и целыми числами, используйте sum().

>>> def foo(n):
    n = str(n)
    if len(n) == 1:
        return int(n)
    return foo(sum(int(c) for c in n))

>>> foo(1969)
7
>>> 

def foo(n):
    n = str(n)
    if len(n) == 1:
        return int(n)
    return foo(sum(int(c) for c in n))

Это так же просто, как задействовать явную рекурсию.

def sum_digits3(n):
    r = 0
    while n:
        r, n = r + n % 10, n // 10
    if len(str(r))>1:
        return sum_digits3(r)
    return r

Но я должен признать, что собираюсь прочитать ссылки, данные подозрительной собакой. И ответ второй мировой войны умнее моего.

Другие вопросы по тегам