Шаг 168.
Рекурсия на Python.
Выполнение программы. Примеры задач

    На этом шаге мы рассмотрим несколько заданий и приведем их решения.

    Приведем несколько примеров решения задач.

    Задание 1. Ниже приведены две функции - сложения и подсчёта цифр неотрицательного целого числа n. Одна из них - неправильная. Объясните, в чём ошибка и какое проектное решение привело к ней.

def add_digits(n):
    if n == 0:
        return 0
    else:
        return add_digits(n // 10) + (n % 10)


def count_digits(n):
    if n == 0:
        return 0
    else:
        return count_digits(n // 10) + 1

Раскрыть/скрыть решение и комментарии.

    Задание 2. Функция в тексте ниже подсчитывает количество двойных символов (например, 'ее', 'оо') в списке длины n ≥ 1. Но в ней есть ошибка. Найдите и устраните её.

def count_consecutive_pairs(a):
    if len(a) == 2:
        return int(a[0] == a[1])
    else:
        return int(a[0] == a[1]) + count_consecutive_pairs(a[1:])

Раскрыть/скрыть решение и комментарии.

    Задание 3. Код в примере ниже предположительно вычисляет нижнюю границу логарифма: ⌊ logbx ⌋, где x ≥ 1 - вещественное число, а b ≥ 2 - целое число. Суть его состоит в подсчете количества возможных делений числа x на b. Однако этот код содержит ошибки. Найдите и устраните их, изменив код.

def floor_log(x, b):
    if x == 1:
        return 0
    else :
        return 1 + floor_log(x / b, b)

Раскрыть/скрыть решение и комментарии.

    Со следующего шага мы начнем рассматривать вложенную и хвостовую рекурсию.




Предыдущий шаг Содержание Следующий шаг