Теория алгоритмов. Учебное пособие для специальности 050201.65 – «Математика с дополнительной специальностью «Информатика», направление подготовки 050
.pdf
ГЛАВА 5. РЕКУРСИВНЫЕ ФУНКЦИИ
5.1. Базовые функции и операции над ними
Если понятие частично рекурсивной функции действительно является формальным эквивалентом эффективной вычислимости, то формулировка этого понятия
может сыграть в истории математики роль, уступающую по значению лишь формулировке понятия натурального числа. Э. Пост
Построим класс вычислимых функций методом, похожим на
аксиоматический. Области определения и области значений функций
принадлежат множеству N0 = {0, 1, 2, 3, …}.
Назовем простейшими или базовыми следующие функции:
1)О(x) = 0 – нуль – функция;
2)S(x) = x + 1 – функция следования;
3)Inm (x1,x2,...,xm,...,xn) xm(1 m n) – функции выбора аргумента.
Базовые функции определены на всем множестве N0 . Функции,
обладающие таким свойством, назовем всюду определенными.
К простейшим функциям будем применять следующие операции. 1). Операция суперпозиции (подстановки).
Даны:
-n функций: f1(x1,x2,...,xm ), f2(x1,x2,...,xm),..., fn(x1,x2,...,xm);
-функция (y1,y2,..., yn ).
Говорят, что функция (x1,x2,...,xm ) получена операцией суперпозиции
из fi и φ, если (x1,x2,..., xm) ( f1(x1,x2,...,xm ),..., fn(x1,x2,..., xm)).
Принципиально важно: количество переменных, от которых зависит функция
, должно совпадать с числом n функций fi . Сами же функции fi должны
61
зависеть от одного и того же числа переменных. Если исходные функции определены от различных переменных, то вводятся фиктивные переменные.
Пример 1:
Применить суперпозицию к функциям:
а) f1(x1,x2) x1 x2 , f2(x1,x2) x1x2 , f3(x1,x2) x1 x2 x1x2 и
(y1, y2, y3) y1 y2 y3 ;
б) О(x) = 0 и S(x) = x +1;
в) f1(x1,x2) x1 x2 , f2(x1) x1, f3(x1,x2) x1 x2 x1x2 в
(y1, y2, y3) y1 y2 y3.
Решение:
а) ψ(x1,x2)= φ(f1(x1,x2), f2(x1, x2), f3(x1,x2))= f1(x1,x2)+ f2(x1, x2) - f3(x1,x2)= = x1+x2 +x1 x2 – (x1+x2 + x1 x2)= 0.
б) возможны два решения:
если обозначим f1(x) O(x), (x) S(x), то ψ(x) = S(О(x)) = S(0) = 1,
если обозначим f1(x) S(x), (x) O(x), то
ψ(x) = О(S(x)) = О(х+1) = 0.
в) заметим, функции f1(x1, x2), f2(x1), f3(x1, x2) зависят от разного числа
переменных, поэтому применить операцию суперпозиции нельзя. Введём
фиктивные переменные, которые |
позволят применить данную операцию: |
||||||
f1(x1,.x2)= x1+ x2, f2(x1)=I1 |
(x ,x |
2 |
), |
f3(x1, x2) = x1+ x2 |
+ x1 |
x2, у функции f |
2 |
2 |
1 |
|
|
|
|
||
введена фиктивная переменная х2. Применим операцию суперпозиции:
ψ(x1, x2) = φ(f1(x1, x2), I21(x1, x2), f3(x1, x2))= f1(x1, x2)+ f2(x1, x2)+ f3(x1, x2)= =x1+x2 +x1 + x1 +x2 + x1 x2= 3x1 +2x2 + x1 x2 .
Пример 2:
Получить из базовых функций с помощью операции суперпозиции следующие функции:
а) ψ(x) = 4;
б) ψ(x) = а (а - константа);
62
в) ψ(x)= x + а.
Решение:
а) ψ(x) = S(S(S(S(О(x)))))= S(S(S(S(0))))= S(S(S(1)))= S(S(2))= S(3)= 4 –
результат четырёхкратного применения операции суперпозиции.
б) ψ(x) = S(…(S(О(x)))…)= а – результат применения операции суперпозиции a раз.
в) ψ(x)= S(…(S(I11 (x)))…)= х + а – аналогично предыдущему примеру. 2) Операция примитивной рекурсии.
Даны:
-функция от п переменных f1(x1, x2, ...,xп) (n > 0);
-функция от п + 2 переменных f2(x1, x2, ..., xп, xn+1, xn+2) (n > 0).
Говорят, что функция от п + 1 переменной (x1,x2,..., xn, y)получена из функций f1 и f2 посредством операции примитивной рекурсии, если:
(x1, x2, ,xn, 0) |
f1(x1, x2,... |
, xп ) |
|
|
|
|
||||||||||
|
|
|
|
f |
|
|
(x , x , |
, x ,0, (x , x , ,x , 0)) |
||||||||
(x , x , ,x , 1) |
2 |
|||||||||||||||
|
1 |
2 |
n |
|
|
1 |
2 ... |
п |
1 |
2 |
n |
|
|
|||
(x , x |
, ,x , 2) |
f |
2 |
(x , x , |
, x |
|
,1, (x , x , ,x |
,1)) |
||||||||
|
1 |
2 |
n |
|
|
1 |
2 ... |
п |
1 |
2 |
n |
|
|
|||
|
|
|
|
f |
|
|
(x , x , |
, x |
|
,2, (x , x , ,x , 2)) |
||||||
(x , x , ,x , 3) |
2 |
|
||||||||||||||
|
1 |
2 |
n |
|
|
1 |
2 ... |
п |
1 |
2 |
n |
|
||||
....... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(x , x , |
, x |
, y 1, (x , |
x , ,x |
, y-1)) |
|||||
(x , x , ,x , y) f |
2 |
|||||||||||||||
|
1 |
2 |
n |
|
|
1 |
2 ... |
п |
|
|
1 |
2 |
n |
|
||
Таким образом, функция (x1,x2,..., xn, y) получена рекурсией по |
||||||||||||||||
переменной y |
|
с использованием функций |
|
f1 и f2. Функция f1 используется |
||||||||||||
только один раз – при вычислении функции φ на наборе (x1, x2, ,xn, 0). Для вычисления на остальных наборах используется функция f2. Основная
задача при построении функций с использованием схемы примитивной
рекурсии |
– найти для |
функции |
|
явный вид формулы от аргументов |
x1,x2,...,xn, y. Обратная |
задача: |
для |
явно заданной функции найти |
|
функции |
f1 и f2, из |
которых |
|
получена в результате применения |
примитивной рекурсии. |
|
|
|
|
|
|
|
63 |
|
Пример 3:
Найти явный вид функции φ, которая получена в результате применения
схемы примитивной рекурсии к заданным функциям f1 и f2:
а) f1(x) = х, f2(x, y, z) = z + 1;
б) f1(x) = 0, f2(x, y, z) = x + z;
в) f1(x) = х, f2(x, y, z) = x + y + z;
г) f1(x, y) = х∙y, f2(x, y, z, s) = x + y + z + s.
Решение:
а) вычислим несколько значений функции φ(х, y), используя определение
схемы примитивной рекурсии: |
|
|
||
φ(х, 0)= f1(x) = х, |
|
|
|
|
φ(х, 1) = f2(x, 0, φ(х, 0)) |
= f2(x,0,х) = x + 1, |
|
||
φ(х, 2) = f2(x,1,φ(х, 1)) |
= f2(x,1, x +1) = x +2, |
|
||
φ(х, 3) = f2(x, 2, φ(х, 2)) |
= f2(x, 2, x +2) = x +3, |
|
||
…. |
|
|
|
|
φ(х, 0) = х + 0, |
|
|
|
|
φ(х, 1) |
= x + 1, |
|
|
|
φ(х, 2) |
= x + 2, |
|
|
|
φ(х, 3) |
= x + 3, |
|
|
|
… |
|
|
|
|
Полагаем, что аналитический вид φ(х, y) = x + y. |
|
|||
Докажем индукцией |
по |
y справедливость |
полученной формулы, |
|
используя |
полученные ранее |
её значения и рекурсивный переход: |
||
(x,y) (x,y 1) 1. Для y 0 |
формула верна. Пусть формула верна для |
|||
y 1. Докажем справедливость |
формулы для y , |
используя рекурсивный |
||
переход. Получим: |
|
|
|
|
(x,y) (x,y 1) 1 x (y 1) 1 x y.
Полученный результат доказывает справедливость явной формулы для .
64
б) вычислим несколько значений функции φ(х, y), используя определение
рекурсии: |
|
|
|
φ(х, 0)= f1(x) = 0, |
|
||
φ(х, |
1) |
= f2(x, 0, φ(х, 0)) |
= f2(x, 0,0) = x + 0 = х, |
φ(х, |
2) |
= f2(x, 1, φ(х, 1)) |
= f2(x,1,x) = x + х = 2х, |
φ(х, |
3) |
= f2(x, 2, φ(х, 2)) |
= f2(x, 2,2х) = x + 2х = 3х, |
…. |
|
|
|
Проанализируем полученные результаты: |
|||
φ(х, |
0) = х 0, |
|
|
φ(х, |
1) = x 1, |
|
|
φ(х, |
2) = x 2, |
|
|
φ(х, |
3) = x 3, |
|
|
…
Предполагаем, что φ(х, y) = x y. Доказательство полученной формулы
индукцией по y предоставляем читателю.
В последующих примерах найдём явную формулу для (x,y), используя таблицу значений функции. Сформулируем гипотезу о явной формуле.
Доказательство гипотезы оставим читателю.
в) вычислим несколько значений функции φ(х, y):
φ(х, 0)= f1(x) = х, |
|
|
φ(х, 1) = f2(x, 0, φ(х, 0)) |
= f2(x,0,х) = x + 0 + х = 2х, |
|
φ(х, 2) = f2(x, 1, φ(х,1)) |
= f2(x, 1,2x) = x + 1 + 2х = 3х + 1, |
|
φ(х, 3) = f2(x, 2, φ(х, 2)) |
= f2(x,2,3х + 1) = x + 2 + 3х + 1 = 4х + 3, |
|
φ(х, 4) = f2(x, 3, φ(х, 3)) |
= f2(x, 3,4х + 3) = x + 3 + 4х + 3 |
= 5х + 6, |
φ(х, 5) = f2(x, 2, φ(х, 2)) |
= f2(x, 2,3х + 1) = x + 2 + 3х + 1 |
= 6х + 10, |
…. |
|
|
Полагаем, что φ(х, y) = х(y + 1) + а, где а – константа, зависящая лишь от y. Найдём зависимость a от y . Проанализируем ряд значений a, изменяя y от
0 до 5:
65
0, 0, 1, 3, 6, 10, …
Выпишем зависимость: y = 0, a = 0,
y = 1, a = 0, y = 2, a = 1, y = 3, a = 3, y = 4, a = 6,
y = 5, a = 10.
При y = 2, а = 1 При y = 3, а равно сумме чисел 1 и 2, т.е. a = 2 + 1 = 3.
Если y = 4, то а равно сумме чисел от 1 до 3, т.е. a = 3 + 2 + 1 = 6. В общем
случае, для произвольного y элемент а равен сумме чисел от 1 до y - 1, т.е.
a 1 2 3 ... (y 1) |
y(y 1) |
. |
|
|
|
|
|
||
2 |
|
|
|
|
В итоге получаем следующую формулу: φ(х, y) = х(y + 1) + |
y(y 1) |
|||
|
. |
|||
2 |
||||
г) Даны функции от двух и четырех переменных. Рекурсией по z
построим функцию (x,y,z) от трёх переменных Вычислим несколько значений функции φ(х, y, z):
φ(х, y, 0)= f1(x, y) = х y,
φ(х, y, 1) = f2(x,y,0, φ(х, y, 0)) = f2(x, y, 0, хy) = x + y + 0 + хy = x + y + хy,
φ(х, y, 2) = f2(x,y,1, φ(х, y, 1)) = f2(x, y, 1, x + y + хy) = x + y + 1 + x + y + хy = 2x + 2y + хy + 1,
φ(х, y, 3) = f2(x,y,2, φ(х, y, 2)) = f2(x, y, 2, 2x + 2y + хy +1) = x + y + 2 + 2x + + 2y + хy + 1= 3x + 3y + хy + 3,
φ(х, y, 4) = f2(x,y,3, φ(х, y, 3)) = f2(x, y, 3, 3x + 3y + хy + 3) = x + y + 3 + 3x
+ 3y + хy + 3 = 4x + 4y + хy + 6
…
Используя результаты предыдущего примера, имеем:
z(z 1)
φ(х, y, z)= z(х + y) + хy + 2 .
66
Продемонстрируем применение схемы примитивной рекурсии на более
сложных функциях, оставляя читателю доказательство справедливости
полученных явных формул:
1.Дано: g(x) 1, h(x,y,z) (y 1) z;
f (x,0) g(x) 1,
f (x,y) h(x,y 1, f (x,y 1)) y f (x,y 1).
f (x,0) 1,
f (x,1) 1 1 1,
f (x,2) 2 1 2,
f (x,3) 3 2 6,
f (x,4) 4 6 24,
…………………
f (x,y) 1 2 3 4 ... |
y y!. |
2.Дано: g(x) x, h(x,y,z) x y z;
f (x,0) g(x) x, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
f (x,y 1)) x (y 1) f (x, |
||||||||||||||||||||||||
f (x,y) h(x,y 1, |
||||||||||||||||||||||||||||
f (x,0) x, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
f (x,1) x (1 1) x 0, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
f (x,2) x (2 1) 0 x 1, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
f (x,3) x (3 1) (x 1) 1, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
f (x,4) x (4 1) 1 x 2, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
f (x,5) x (5 1) (x 2) 2, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
………………… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
( 1) |
y |
|
|
|
1 |
||||||
|
|
x ( 1) |
y 1 |
x |
|
y |
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
2 |
|
|
|
||||||||||||||||||||||
f (x, y) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
||||
2 |
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
x(1 ( 1) |
y 1 |
) y |
|
|
|
|
1 |
|
|
|
|
y |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
(1 ( 1) |
|
) |
|
|
|
|
|
|||||||||||
|
|
|
|
|
2 |
|
|
|
|
|
||||||||||||||||||
f (x, y) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
y 1).
или
67
3.Дано: g(x) x, h(x,y,z) x y z;
f (x,0) g(x) x, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
f (x,y 1)) x (y 1) f (x,y 1). |
||||||||||||||||||||||||
f (x,y) h(x,y 1, |
|||||||||||||||||||||||||||
f (x,0) x, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
f (x,1) x (1 1) x 0, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
f (x,2) x (2 1) 0 x 1, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
f (x,3) x (3 1) (x 1) 1, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
f (x,4) x (4 1) ( 1) x 2, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
f (x,5) x (5 1) (x 2) 2, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
………………… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
y |
|
|
|
1 |
||||
|
|
x ( 1) |
y 1 |
x |
|
y |
|
|
|
|
|
|
|
|
( 1) |
|
|
|
|
|
|||||||
|
|
|
|
|
|
2 |
|
|
|
||||||||||||||||||
f (x, y) |
|
|
|
( 1)y |
|
|
|
|
|
|
|
|
|
2 |
или |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
||||||||||
2 |
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
x(1 ( 1) |
y 1 |
) y |
|
|
y |
|
|
1 |
|
|
|
y |
|
|
|
|
|
|
|||||||
|
|
|
|
( 1) |
|
|
|
|
|
|
(1 ( 1) |
|
) |
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
f (x, y) |
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
; |
|
|
|
|||
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
4.Дано: g(x) 0, h(x,y,z) x z;
f (x,0) g(x) 0,
f (x,y) h(x,y 1, f (x,y 1)) x f (x,y 1). f (x,0) 0,
f (x,1) x 0 x, f (x,2) x x 2x, f (x,3) x 2x 3x, f (x,4) x 3x 4x, f (x,5) x 4x 5x,
…………………
f (x,y) y x.
5.Дано: g(x) 0, h(x,y,z) x z;
68
f (x,0) g(x) 0,
f (x,y) h(x,y 1, f (x,y 1)) x f (x,y 1).
f (x,0) 0,
f (x,1) x 0 x,
f (x,2) x x 0,
f (x,3) x 0 x,
f (x,4) x x 0,
…………………
f (x, y) x(1 ( 1)y ) . 2
6.Дано: g(x) x, h(x,y,z) x z;
f (x,0) g(x) x,
f (x,y) h(x,y 1, f (x,y 1)) x f (x,y 1). f (x,0) x,
f (x,1) x x 2x, f (x,2) x 2x 3x, f (x,3) x 3x 4x, f (x,4) x 4x 5x,
…………………
f (x,y) (y 1) x.
7.Дано: g(x) x, h(x,y,z) x z;
f (x,0) g(x) x,
f (x,y) h(x,y 1, f (x,y 1)) x f (x,y 1).
f (x,0) x,
f (x,1) x x 0,
f (x,2) x 0 x,
f (x,3) x x 0,
69
f (x,4) x 0 x,
…………………
f (x, y) x(1 ( 1)y 1) . 2
8.Дано: g(x) x, h(x,y,z) y2 z;
f (x,0) g(x) x,
f (x,y) h(x,y 1, f (x,y 1)) (y 1)2 f (x,y 1). f (x,0) x,
f (x,1) (1 1)2 x x,
f (x,2) (2 1)2 ( x) 1 x, f (x,3) (3 1)2 (1 x) 3 x, f (x,4) (4 1)2 (3 x) 6 x,
f (x,5) (5 1)2 (6 x) 10 x, f (x,6) (6 1)2 (10 x) 15 x,
…………………
f (x,y) ( 1)y x y(y 1) . 2
9.Дано: g(x) x, h(x,y,z) y2 z;
f (x,0) g(x) x,
f (x,y) h(x,y 1, f (x,y 1)) (y 1)2 f (x,y 1).
f (x,0) x,
f (x,1) (1 1)2 x x,
f (x,2) (2 1)2 x 1 x,
f (x,3) (3 1)2 (1 x) 5 x, f (x,4) (4 1)2 (5 x) 14 x,
f (x,5) (5 1)2 (14 x) 30 x,
70
