Рекурсия: вычислить значение функции Аккермана - Pascal
Формулировка задачи:
Даны неотрицательные целые числа n,m; используя рекурсивную подпрограмму, вычислить значение функции Аккермана A(n,m), где A(n,m)={m=1, если n=0;A(n-1, 1), если n<>0, m=0; A(n-1,A(n,m-1)), если n>0, m>0}
Решение задачи: «Рекурсия: вычислить значение функции Аккермана»
textual
Листинг программы
function A(const n, m: Extended): Extended; var Result: Extended; begin if (n = 0) then Result := m + 1 else if (m = 0) then Result := A(n - 1, 1) else Result := A(n - 1, A(n, m - 1)); A := Result; end; var n, m: Byte; begin Write('Input n, m: '); ReadLn(n, m); WriteLn('A(', n, ',', m, ')=', A(n, m):0:0); end.
Объяснение кода листинга программы
- Объявляется функция с именем
A
и параметрамиn
иm
типа Extended. - Объявляется переменная
Result
типа Extended. - Проверяется условие: если
n
равно 0, то присваиваетсяResult
значениеm + 1
. - Если условие из пункта 3 неверно, проверяется условие: если
m
равно 0, тоResult
получает значение вызова функцииA
с параметрамиn - 1
и1
. - Если оба предыдущих условия ложны,
Result
получает значение вызова функцииA
с параметрамиn - 1
и вызова функцииA
с параметрамиn
иm - 1
. - Функция
A
возвращает значениеResult
. - Объявляются переменные
n
иm
типа Byte. - Пользователю предлагается ввести значения для
n
иm
. - Выводится результат вызова функции
A
с параметрамиn
иm
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д