С таким определением моё решение - вполне нерекурсивное.
Если я правильно понял, Вы организуете стек в виде списка...
Вы же сами понимаете, что
по сути Ваше решение всё же "рекурсивное"
А от меня хотите, чтобы я дал строгую формализацию, запрещающие "рекурсивные" решения. Нет, чтобы проявить добрую волю
Хорошо, сделаем так.
Запрещается использовать динамическую память. То есть в программе должно быть изначально объявлено конечное число переменных "статического типа", под каждую из которых отведена одна-единственная ячейка памяти (способная хранить произвольное целое число). И программа по ходу работы может пользоваться только этой памятью...
Если хотите, порешайте эту задачу. Но... вообще-то хрен редьки не слаще. Внутрь безразмерной ячейки памяти можно загнать счётное число таких же безразмерных ячеек, используя теорему об единственности разложения натуральных чисел в произведение простых множителей. Или используя приём с функцией Гёделя, основанный на китайской теореме об остатках. А далее одну из ячеек можно выделить под тот же самый стек...
Честно говоря, то решение, которое я изначально имел в виду, по сути это и делает. То есть
принципиально нерекурсивных программ, вычисляющих функцию Аккермана, похоже, нет и быть не может. Так что по большому счёту я пока снимаю задачу. Ну или признаю её даже не то, что открытой проблемой, а проблемой, которую непонятно как надо формализовывать
-- Чт ноя 05, 2009 00:06:17 --Примитивная рекурсия - это цикл for.
Оператор
- это цикл while.
Ага
Причём есть такой интересной факт: любая вычислимая функция может быть представлена в виде
, где
и
--- примитивно рекурсивные функции. То есть любую вычислимую функцию можно запрограммировать так, что будет использоваться только один цикл while и какое-то конечное число циклов for (и не будет использоваться goto).
Профессор Снэйп, объясните, пожалуйста, немного подробнее, какая связь между частичной рекурсивностью функции и возможностью ее вычисления с помощью итеративного алгоритма. (Можно ссылкой на учебник ).
Ну... это фольклор
Возможно, где-то в каком-то учебнике это и прописано, но я его не читал.
Если совсем схематично, то
Xaositect уже объяснил. А чуть более подробно... в двух словах не изложишь. Почитайте где-нибудь доказательство теоремы о том, что функция частично рекурсивно тогда и только тогда, когда она вычислима на обладающей достаточными вычислительными возможностями машине (какой-нибудь заранее выбранной, классика --- машина Тьюринга, хотя её можно заменить и на обычный снабжённый тем же Паскалем компьютер с потенциально бесконечной памятью). Там очень много чисто технических деталей, но если всё осилить, становится понятным, что имеется в виду.