Files
freeCodeCamp/curriculum/challenges/ukrainian/22-rosetta-code/rosetta-code-challenges/ackermann-function.md
camperbot 7a0d396180 chore(i18n,learn): processed translations (#53415)
Co-authored-by: Naomi Carrigan <nhcarrigan@gmail.com>
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
2024-02-13 18:31:01 +01:00

72 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: 594810f028c0303b75339acf
title: Функція Акермана
challengeType: 1
forumTopicId: 302223
dashedName: ackermann-function
---
# --description--
Функція Акермана — класичний приклад рекурсивної функції, особливо через те, що вона не є примітивною рекурсивною функцією. Вона дуже швидко зростає у значенні, зростає і дерево викликів.
Зазвичай функцію Акермана визначено наступним чином:
$A(m, n) = \\begin{cases} n+1 & \\mbox{якщо } m = 0 \\\\ A(m-1, 1) & \\mbox{якщо } m > 0 \\mbox{ та } n = 0 \\\\ A(m-1, A(m, n-1)) & \\mbox{якщо } m > 0 \\mbox{ та } n > 0. \\end{cases}$
Її аргументи завжди додатні, і вона завжди закінчується.
# --instructions--
Напишіть функцію, яка повертає значення $A(m, n)$. Довільна точність бажана (оскільки функція швидко зростає), але не є обов’язковою.
# --hints--
`ack` має бути функцією.
```js
assert(typeof ack === 'function');
```
`ack(0, 0)` має повернути 1.
```js
assert(ack(0, 0) === 1);
```
`ack(1, 1)` має повернути 3.
```js
assert(ack(1, 1) === 3);
```
`ack(2, 5)` має повернути 13.
```js
assert(ack(2, 5) === 13);
```
`ack(3, 3)` має повернути 61.
```js
assert(ack(3, 3) === 61);
```
# --seed--
## --seed-contents--
```js
function ack(m, n) {
}
```
# --solutions--
```js
function ack(m, n) {
return m === 0 ? n + 1 : ack(m - 1, n === 0 ? 1 : ack(m, n - 1));
}
```