В теории вычислимости вычислимые функции также называют рекурсивными функциями. По крайней мере, на первый взгляд, они не имеют ничего общего с тем, что вы называете «рекурсивным» в повседневном программировании (т. Е. Функциями, которые сами себя вызывают).
Каково реальное значение рекурсивности в контексте вычислимости? Почему эти функции называются «рекурсивными»?
Другими словами: какова связь между двумя значениями «рекурсивность»?
computability
terminology
history
Голо Роден
источник
источник
Ответы:
Определите некоторые основные функции:
нулевая функция
функция преемника
функция проекции
С этого момента я буду использовать для обозначения ( х 1 , х 2 , ... , х п )ИксN¯ ( х1, х2, … , ХN)
Определите состав:
Данные функции
Построить следующую функцию:
Определим примитивную рекурсию:
Данные функции
Построить следующую (кусочную) функцию:
Все функции, которые могут быть выполнены с использованием композиций и примитивной рекурсии по базовым функциям , называются примитивно-рекурсивными . Так называется по определению. Хотя существует связь с функциями, которые сами себя вызывают, нет необходимости пытаться связать их друг с другом. Вы можете считать рекурсию омонимом.
Это определение и конструкция, приведенная выше, была построена Гёделем (также участвовали несколько других людей) в попытке охватить все функции, которые можно вычислить, т. Е. Для этой функции существует машина Тьюринга. Обратите внимание, что концепция машины Тьюринга еще не была описана или, по крайней мере, очень расплывчата.
(Не) к счастью, кто-то по имени Аккерман пришел и определил следующую функцию:
Эта функция вычислима, но нет способа построить ее, используя только конструкции выше! (т.е. не является примитивно-рекурсивным) Это означает, что Гедель и его отряд не смогли охватить все вычислимые функции в их построении!А сK
Геделю пришлось расширить свой класс функций, чтобы можно было построить . Он сделал это, определив следующее:А сK
Неограниченная минимизация
Все функции, которые могут быть построены со всеми конструкциями, определенными выше, называются рекурсивными . Опять же, рекурсивное имя просто по определению, и оно не обязательно имеет корреляцию с функциями, которые сами себя вызывают. Воистину, считай это омонимом.
Если вы заинтригованы, вы можете попытаться сделать класс Геделя больше. Вы можете попытаться определить «противоположность» неограниченной минимизации. То есть неограниченная максимизация, т.е. функция, которая находит самый большой корень. Тем не менее, вы можете обнаружить, что вычислить эту функцию сложно (невозможно). Вы можете прочитать о проблеме занятого бобра , которая пытается применить неограниченную максимизацию.
источник
Основоположниками теории вычислимости были математики. Они основали то, что сейчас называется теорией вычислимости еще до появления компьютеров. Как математики определяли функции, которые можно было вычислить? По рекурсивным определениям!
Таким образом, существовала рекурсивная функция до появления любой другой модели вычислений, такой как машины Тьюринга, лямбда-исчисления или машины регистров. Поэтому люди называют эти функции рекурсивными функциями. Тот факт, что они оказались именно тем, что могут вычислить машины Тьюринга и другие модели, является более поздним событием (в основном доказанным Клин).
Название поля используется в теории рекурсии. Однако в последние десятилетия был успешный толчок к изменению названия на что-то более привлекательное от теории рекурсии до чего-то более компьютерного (по сравнению с математикой). В результате область теперь называется теорией вычислимости. Однако если вы посмотрите на книги, статьи, конференции и т. Д. В первые десятилетия, они называются теорией рекурсии, а не теорией вычислимости. Даже название собственной книги Соаре 1987 года (которая была главной фигурой, побудившей сменить название на теорию вычислимости) - «Рекурсивно перечислимые множества и степени».
Если вы хотите узнать больше об истории, то самое интересное и интересное место для ее изучения - первая глава Классической теории рекурсии Одифредди.
источник
Роберт Соаре написал эссе по этому вопросу. По его словам, термин (общие) рекурсивные функции был придуман Геделем, который определил их с помощью некоторой взаимной рекурсии. Имя застряло, хотя позже были найдены другие эквивалентные определения.
Для получения дополнительной информации я рекомендую сочинение Соаре.
источник
вместо длинного комментария решил добавить ответ:
Потому что они определены рекурсивно , то есть « более сложные функции определены в терминах ранее определенных, более простых функций »
Этот вид итеративной или инкрементной процедуры создает четко определенные функции (в математическом смысле)
В этом смысл рекурсивности на математическом языке. Ниже показано, как это относится к рекурсии на языке программирования.
Сравните эту процедуру с методами и методами, такими как (математическая) индукция, которая также является примером рекурсивности в математике.
Программирование имеет как математическую, так и инженерную направленность.
Это (конструктивная обычно работают на жидком) процедура также refered , как « самозагрузки » в операционных системах жаргоне.
Однако выполнения рекурсии той же функции (то есть caling сама во время ее выполнения ), так как он должен (хмм, должно случиться) на уже вычисленных значений (или аргументы), или другими словами, в части набора результатов уже вычислен , также является рекурсивным в вышеприведенном смысле, то есть « определено с помощью ранее определенных функций (и их значений) »
Остальное не очень четко определено, и приводит к таким вещам, как переполнение стека :))))
Чтобы привести еще один пример из операционных систем, рекурсия времени выполнения (вызывающая себя) может быть взята в качестве аналога перезагрузки операционной системы после определенного обновления (например, обновления ядра). Многие операционные системы выполняют следующую процедуру:
Прекрасный ответ Оберона демонстрирует процедуру такого рода более подробно.
источник