B. Рекурсивный сумматор цифр

Рекурсия – отличный способ избавиться от циклов, особенно от while. Давайте вспомним одну из наших старых задач и модернизируем её.

Напишите функцию recursive_digit_sum, которая находит сумму всех цифр натурального числа.

Примечание

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

Пример

Ввод

result = recursive_digit_sum(123)

Вывод

# Вызов recursive_digit_sum(123)
# Вызов recursive_digit_sum(12)
# Вызов recursive_digit_sum(1)
# Вызов recursive_digit_sum(0)
result = 6

Ввод

result = recursive_digit_sum(7321346)

Вывод

# Вызов recursive_digit_sum(7321346)
# Вызов recursive_digit_sum(732134)
# Вызов recursive_digit_sum(73213)
# Вызов recursive_digit_sum(7321)
# Вызов recursive_digit_sum(732)
# Вызов recursive_digit_sum(73)
# Вызов recursive_digit_sum(7)
# Вызов recursive_digit_sum(0)
result = 26

Решение

По сути та же самая задача про кучу кирпичей. Для ее решения нам надо любым способом разделить число на одну цифру и «остальное», после чего рекурсивно вызвать функцию, передав ей на вход «остальное», а по окончании ее работы прибавить полученный результат к той самой цифре.

Первый и второй вариант имеют разные граничные условия, поэтому первый вариант совершит на один вызов меньше.

Посмотреть код

Решение

Python
def recursive_digit_sum(num):
    while num >= 10:
        # print(f'# recursive_digit_sum({num // 10}), {num % 10}')
        return num % 10 + recursive_digit_sum(num // 10)
    return num

Решение

Python
def recursive_digit_sum(num):
    return num % 10 + recursive_digit_sum(num // 10) if num else 0
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Джеймс
Джеймс
23.09.2025 15:20
def recursive_digit_sum(number):
    number = str(number)
    if not number:
        return 0
    return int(number[-1]) + recursive_digit_sum(number[:-1])