Шаг 109.
Рекурсия на Python.
Множественная рекурсия I: "разделяй и властвуй". Примеры задач
На этом шаге мы рассмотрим несколько заданий и приведем их решения.
Приведем несколько примеров решения задач.
Задание 1.
Применив подход "разделяй и властвуй", реализуйте алгоритм, определяющий наличие в списке элемента X.
Раскрыть/скрыть решение и комментарии.
Будем завершать рекурсию в следующих случаях:
- когда список пустой (возвращаем False);
- когда список состоит из одного элемента (возвращаем результат сравнения el == a[0]).
Во всех остальных случаях делим список пополам и вызываем рекурсивно функцию.
Вот текст программы:
Задание 1.
1 2 3 4 5 6 7 8 9 |
def is_elem(a, el):
n = len(a)
if n == 0:
return False
elif n == 1:
return el == a[0]
else:
return (is_elem(a[0:n // 2], el) or
is_elem(a[n // 2:n], el))
|
Архив с файлом можно взять
здесь.
Задание 2.
Пусть a - список из n неотрицательных целых чисел. Опираясь на подход "разделяй и властвуй", напишите функцию, возвращающую множество цифр, входящих во все значения
элементов а. Например, для а = [2348, 1349, 7523, 3215] результатом будет {3}. Функция должна вызывать другую функцию, которая возвращает
множество цифр неотрицательного целого числа. Реализуйте и её тоже.
Раскрыть/скрыть решение и комментарии.
Приведем текст программы. Он практически не отличается от решения первой задачи. Попробуйте разобраться с ней самостоятельно.
Задание 2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def mnog(x):
if x == 0:
return set(0)
rez = set()
while x != 0:
rez.add(x % 10)
x = x // 10
return rez
def mnog_elem(a):
n = len(a)
if len(a) == 0:
return set()
elif len(a) == 1:
return mnog(a[0])
else:
return (mnog_elem(a[0:n // 2]) &
mnog_elem(a[n // 2:n]))
|
Архив с файлом можно взять
здесь.
Со следующего шага мы начнем рассматривать более сложные задачи, использующие множественную рекурсию.
Предыдущий шаг
Содержание
Следующий шаг