Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dm3_lekcija12.doc
Скачиваний:
3
Добавлен:
18.11.2019
Размер:
103.42 Кб
Скачать

Лекция 12. Рекурсивные функции.

§ 12.1. Роль рекурсивных функций

Задача точного определения понятия алгоритма была полностью решена в 30-х годах XX века в двух формах: на основе описания алгоритмического процесса и на основе понятия рекурсивной функции.

Первый подход подробно описан в первых лекциях и заключается в том, что был сконструирован формальный автомат, способный осуществлять ограниченный набор строго определённых элементарных операций (машина Тьюринга). Алгоритмом стали называть конечную последовательность таких операций и постулировали предложение, что любой интуитивный алгоритм является алгоритмом и в сформулированном выше смысле. То есть для каждого алгоритма можно подобрать реализующую его машину Тьюринга.

Развитие этой теории позволило строго доказать алгоритмическую неразрешимость ряда важных математических проблем. Однако её существенным недостатком является невозможность реализации такой полезной конструкции как рекурсия.

Этого недостатка лишён другой подход к формализации понятия алгоритма, развитый Гёделем и Чёрчем. Здесь теория построена на основе широкого класса так называемых частично рекурсивных функций.

Замечателен тот факт, что оба данных подхода, а также другие подходы (в т.ч. алгоритмы Маркова, машины Поста) приводят к одному и тому же классу алгоритмически вычислимых функций. Поэтому далее представляется целесообразным рассмотреть теорию частично рекурсивных функций Чёрча, так как она позволяет доказать не только алгоритмическую разрешимость конкретной задачи, но и существование для неё рекурсивного алгоритма.

Важно отметить, что рекурсия сама по себе не является алгоритмом, она является методом построения алгоритмов. Ее очень удобно применять (но не обязательно эффективно) в тех случаях, когда можно выделить самоподобие задачи, т.е. свести вычисление задачи некоторой размерности N к вычислению аналогичных задач меньшей размерности.

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

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

Широкий класс частично-рекурсивных функций, как будет показано далее, можно детализировать, строго выделив довольно интересные по своим свойствам подклассы примитивно-рекурсивных и общерекурсивных функций. Гипотеза Черча (о тождественности класса общерекурсивных функций и класса всюду определенных вычислимых функций) и гипотеза Клини (о тождественности класса частичных функций, вычисляемых посредством алгоритмов, и класса частично-рекурсивных функций) хотя и являются недоказуемыми, позволили придать необходимую точность формулировкам алгоритмических проблем и в ряде случаев сделать возможным доказательство их неразрешимости.

Тезис Черча. Класс алгоритмически (или машинно) вычислимых частичных арифметических функций совпадает с классом всех частично рекурсивных функций.

Иными словами, частичная арифметическая функция, вычислимая в общем смысле, есть суть частично рекурсивная функция. Это не строгое определение, это вывод на уровне тезиса (не доказанное, но и не опровергнутое утверждение).

Рис. 12.1. Эквивалентность классов функций ВЧАФ и ЧРФ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]