Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория алгоритмов (конспект).doc
Скачиваний:
82
Добавлен:
03.03.2016
Размер:
1.41 Mб
Скачать

Рекурсивные функции

Самая первая алгоритмическая система.

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

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

Функция называется рекурсивной, если существует эффективная процедура ее вычисления.

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

Гипотеза Черча: класс рекурсивных функций тождественен с классом всюду определенных вычислимых функций.

Частично определенные целочисленные и целозначные функции называют арифметическими функциями. Среди них выделяют наиболее простые, которые называются элементарные арифметические функции.

Простые функции:

  • тождественно равные нулю

0n(x1, x2, …, xn) = 0

n – количество аргументов

  • повторяющая значение аргумента

Iin (x1, x2, …, xn) = xi

  • функция непосредственного следования

S1(x) = x+1

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

В теории алгоритмов наиболее важными являются 3 метода построения сложных функций:

  • суперпозиция

  • примитивная рекурсия

  • наименьшего корня

Операция суперпозиции

Суть суперпозиции заключается в том, что вместо аргументов одних функций подставляются другие функции.

В общем виде:

Пусть заданы n-функций f1,f2,…,fn от m аргументов каждая и некоторая функция f(x1,x2,…,xn) f(a1,a2,…,am), тогда операция суперпозиции означает, что можем получить новую функцию g(x1,…,xm) = f(f1(…), f2(...),…,fn(…))

Пример:

1. Даны две функции f(x)=0; g(x)=x+1

h(x) = g(f(x)) = 0+1 = 1

H(x) = g(g(x)) = x+2

2. Даны две функции f(x)=0; g(x)=x

h(x) = g(f(x)) = 0

H(x) = g(g(x)) = x

3. Даны две функции f(x)=x; g(x)=x+1

h(x) = g(f(x)) = x+1

В результате при операции суперпозиции получаются 2 новые функции при f(x)=0 и g(x)=x+1, в других случаях функция не изменяется.

Операции примитивной рекурсии

Операция примитивной рекурсии позволяет строить n+1 одноместную функцию по двум заданным функциям, одна – n - местная, вторая – n+2-местная. f от n+1

g от n

h от n+2

Пусть заданы частичные арифметические функции g(x1,…,xn) и h(x1,…,xn,xn+1, xn+2). Тогда функция f получается из g и h с помощью применения рекурсии:

f(x1,x2,…xn,0) = g(x1,x2,…xn)

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

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

На основе данного определения можно определить функцию константу.

f(0) = a

f(x+1) = h(x0,f(x))

Если функции g и h существуют, то необходимо установить существует ли функция f получаемая примитивной рекурсией и будет ли она единственная.

f(x1,…,xn,0) = g(x1,…,xn)

f(x1,…,xn,1) = h(x1,…,xn,0,g(x1,…,xn))

f(x1,…,xn,2) = h(x1,…,xn,1,h(x1,…,xn,1))

…………………………………………..

f(x1,…,xn,m+1) = h(x1,…,xn,m,f(x1,…,xn,m))

Вычислим любые значения этой функции

f = x+y

g(x) = x – функция повторения

h(x,y,z) = z+1 – функция следования

f(x,0) = x

f(x,1) = h(x,0,x) = x+1

f(x,2) = h(x,1,x+1) = x+2

Двухместную функцию x*y можно вычислить, используя функции

f = xy

g(x) = 0

h(x,y,z) = z+x

В теории алгоритмов есть операция вычитания:

f = xy =