Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save evgeniyworkbel/537f474fcbba5860b78cc58ca54b5515 to your computer and use it in GitHub Desktop.
Save evgeniyworkbel/537f474fcbba5860b78cc58ca54b5515 to your computer and use it in GitHub Desktop.
Курс "Введение в программирование", Hexlet.io
const ackermann = (m, n) => {
if (m === 0) {
return n + 1;
}
if (m > 0 && n === 0) {
return ackermann (m - 1, 1);
}
return ackermann(m - 1, ackermann(m, n - 1));
};
export default ackermann;
const ackermann = (m, n) => {
if (m === 0) {
return n + 1;
}
if (n === 0) {
return ackermann(m - 1, 1);
}
return ackermann(m - 1, ackermann(m, n - 1));
};
export default ackermann;
Функция Аккермана — простой пример вычислимой функции, которая не является примитивно рекурсивной.
Она обозначается A(m,n), принимает два неотрицательных целых числа в качестве параметров и возвращает натуральное число.
Эта функция растёт очень быстро, например, число A(4,4) настолько велико, что количество цифр в порядке этого числа многократно
превосходит количество атомов в наблюдаемой части Вселенной.
Функция Аккермана определяется рекурсивно для неотрицательных целых чисел m и n следующим образом:
= n + 1 при m = 0;
A(m, n) = A(m - 1, 1) при m > 0, n = 0;
= A(m - 1, A(m, n - 1) при m > 0, n > 0;
Задание:
Реализуйте и экспортируйте по умолчанию функцию Аккермана.
Примеры использования:
ackermann(0, 0); // 1
ackermann(2, 1); // 5
ackermann(2, 3); // 9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment