Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция 3.docx
Скачиваний:
22
Добавлен:
02.10.2020
Размер:
71.11 Кб
Скачать

Операторы для построения рекурсивных функций

Из уже имеющихся базисных вычислимых функций новые вычислимые функции строятся с помощью следующих операций.

Оператор суперпозиции (s) (регулярная суперпозиция)

Оператором суперпозиции S называется подстановка в функцию от m переменных m функций от n этих же переменных. Получаем новую функцию от n переменных.

С помощью оператора суперпозиции из некоторых функций:

можно получить новую функцию g:

g = Sm+1(f, f1, f2, ..., fm) = g(x1, x2, ..., xn) =

f( f1(x1, x2, ..., xn), f2(x1, x2, ..., xn), ..., fm(x1, ..., xn)).

индекс сверху m+1указывает на число функций.

Функция g является

  • частичной функцией от n переменных.

  • её значение определено тогда и только тогда, когда определены все выражения в правой части

  • если функции f, f1, f2,..., fm вычислимы, то и функция g вычислима.

Алгоритм ее вычисления описывается правой частью равенства.

Пример. При помощи оператора суперпозиции и функции выбора можно выразить любую подстановку функции в функцию.

Например, осуществляя операцию суперпозиции функций

f(x) = 0 и f1(x) = x+1,

получим функцию:

g(x) = f1(f(x)) = 0 + 1 = 1.

При суперпозиции функции f1(x) с этой же функцией получим функцию

g(x) = f1(f1(x)) = x+1 + 1 = x+ 2.

Таким же образом с помощью оператора суперпозиции можно получить любую константу

S(S( …(Z(x)) …)) = n, где число вложенных функций следования равно n.

или сдвиг числа на константу n, также равную числу вложенных функций следования

S(S( …(S(x)) …)) = x + n

Оператор примитивной рекурсии (r)

С помощью этого оператора конструируем функцию f от n+1 переменной из некоторых частичных функций

g(x1, x2, ..., xn) и

h(x1, x2, ..., xn, y, z),

функция g имеет n переменных, а функция h имеет n+2 переменных.

Значения новой функции f вычисляем оператором примитивной рекурсии по двум правилам:

  1. f(x1,x2,...,xn,0) = g(x1,x2,...,xn),

  2. f(x1,x2,...,xn,y+1) = h(x1,x2,...,xn,y, f(x1,x2,...,xn,y))

  • означает вычисление значения f(x1,x2,...,xn,y+1) с использованием f(x1,x2,...,xn,y) (возвращением к ранее вычисленному значению).

  • Приведенная пара равенств называется схемой примитивной рекурсии.

  • В операции примитивной рекурсии всякую функцию от меньшего числа аргументов можно рассматривать как функцию от большего числа аргументов.

  • Существенным является то, что независимо от числа переменных в f рекурсия ведется только по одной переменной у.

  • Остальные n переменных x1, x2, ..., xn на момент применения схемы зафиксированы и играют роль параметров.

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

  • Эта возможность позволяет напрямую реализовывать вычисление рекурсивно определенных функций.

  • Любой рекурсивный алгоритм может быть реализован итерационно.

  • Если программист начинает использовать оператор цикла while, в котором число итераций заранее неизвестно и может быть бесконечным, то он переходит в класс частично рекурсивных функций.

Соседние файлы в папке Лекции