Вычисление функции Аккермана итерационно - Turbo Pascal
Формулировка задачи:
Помогите пожалуйста написать программу для вычисления функции акермана, не рекурсивным путём.
Прокопал интернет, ничего не нашёл. Сам понять не могу, как выполнить это итерационно. Буду благодарен, если кто поможет, сроки поджимают
Решение задачи: «Вычисление функции Аккермана итерационно»
textual
Листинг программы
const tsize = maxint div 2 div sizeof(integer); var s : array[1 .. tsize] of integer; d : integer; function IterAckermann(m, n : integer) : longint; var t : integer; begin t := 1; s[t] := m; repeat m := s[t]; dec(t); if m = 0 then inc(n) else if n = 0 then begin inc(t); s[t] := m - 1; n := 1 end else begin inc(t); s[t] := m - 1; inc(t); s[t] := m; dec(n); end; if t > d then begin d := t; if d > tsize then writeln('failure'); end; until t = 0; IterAckermann := n; end; begin d := 1; writeln(IterAckermann(3, 7)); end.
Объяснение кода листинга программы
- В начале кода объявляются необходимые переменные и константы.
- Функция IterAckermann принимает два аргумента m и n, которые представляют собой значения, для которых вычисляется функция Аккермана.
- Переменная t инициализируется значением 1.
- Создается массив s, который будет использоваться для хранения промежуточных значений функции Аккермана.
- Первая итерация: m присваивается значение s[t], t уменьшается на 1, и если m равно 0, то увеличивается значение n.
- Если n равно 0, то выполняется дополнительный код, который увеличивает значение t, устанавливает s[t] равным m-1 и n=1.
- Если n не равно 0, то выполняется дополнительный код, который увеличивает значение t, устанавливает s[t] равным m-1, затем увеличивает значение t и устанавливает s[t] равным m.
- Если t больше d, то d устанавливается равным t, и если d больше tsize, то выводится сообщение
failure
. - Цикл повторяется до тех пор, пока t не станет равным 0.
- По завершении итераций функция IterAckermann возвращает значение n.
- В основной части кода значение d устанавливается равным 1.
- Выводится результат вызова функции IterAckermann(3, 7).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д