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

Объяснение кода листинга программы

  1. В начале кода объявляются необходимые переменные и константы.
  2. Функция IterAckermann принимает два аргумента m и n, которые представляют собой значения, для которых вычисляется функция Аккермана.
  3. Переменная t инициализируется значением 1.
  4. Создается массив s, который будет использоваться для хранения промежуточных значений функции Аккермана.
  5. Первая итерация: m присваивается значение s[t], t уменьшается на 1, и если m равно 0, то увеличивается значение n.
  6. Если n равно 0, то выполняется дополнительный код, который увеличивает значение t, устанавливает s[t] равным m-1 и n=1.
  7. Если n не равно 0, то выполняется дополнительный код, который увеличивает значение t, устанавливает s[t] равным m-1, затем увеличивает значение t и устанавливает s[t] равным m.
  8. Если t больше d, то d устанавливается равным t, и если d больше tsize, то выводится сообщение failure.
  9. Цикл повторяется до тех пор, пока t не станет равным 0.
  10. По завершении итераций функция IterAckermann возвращает значение n.
  11. В основной части кода значение d устанавливается равным 1.
  12. Выводится результат вызова функции IterAckermann(3, 7).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы