Вычисление функции Аккермана итерационно - Turbo Pascal

Формулировка задачи:

Помогите пожалуйста написать программу для вычисления функции акермана, не рекурсивным путём. Прокопал интернет, ничего не нашёл. Сам понять не могу, как выполнить это итерационно. Буду благодарен, если кто поможет, сроки поджимают

Код к задаче: «Вычисление функции Аккермана итерационно - 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.

5   голосов, оценка 4.400 из 5


СОХРАНИТЬ ССЫЛКУ