Рекурсия: вычислить значение функции Аккермана - 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.