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
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии