Рекурсия – отличный способ избавиться от циклов, особенно от 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
Решение
По сути та же самая задача про кучу кирпичей. Для ее решения нам надо любым способом разделить число на одну цифру и “остальное”, после чего рекурсивно вызвать функцию, передав ей на вход “остальное”, а по окончании ее работы прибавить полученный результат к той самой цифре.
Первый и второй вариант имеют разные граничные условия, поэтому первый вариант совершит на один вызов меньше.
Посмотреть код
Решение
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
Решение
def recursive_digit_sum(num):
return num % 10 + recursive_digit_sum(num // 10) if num else 0