아커만 함수 계산기
세 줄짜리 정의로 A(m, n)을 계산하고, 정의를 그대로 따라갈 때 호출이 몇 번 일어나는지 함께 셉니다. m이 하나 오를 때마다 더하기·곱하기·거듭제곱·거듭제곱탑으로 한 단계씩 뛰어오르는 모습을 닫힌 식과 나란히 확인할 수 있습니다.
0부터 30까지. m이 클수록 작은 n에서도 값이 폭발합니다.
A(3, 3)
61
A(3, n) = 2^(n+3) − 3 — m = 3은 «거듭제곱» 단계입니다.
A(m, n) 표
| m \ n | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 0 · 다음 수 (n + 1) | 1 | 2 | 3 | 4 | 5 | 6 |
| 1 · 더하기 | 2 | 3 | 4 | 5 | 6 | 7 |
| 2 · 곱하기 | 3 | 5 | 7 | 9 | 11 | 13 |
| 3 · 거듭제곱 | 5 | 13 | 29 | 61 | 125 | 253 |
| 4 · 거듭제곱탑 (테트레이션) | 13 | 65533 | 19,729자리 | 적을 수 없음 | 적을 수 없음 | 적을 수 없음 |
m이 하나 오를 때마다 연산이 한 단계 올라갑니다. 더하기가 반복되면 곱하기가 되고, 곱하기가 반복되면 거듭제곱이 되는 그 사다리를 그대로 올라갑니다. 그래서 네 번째 줄부터는 값을 적는 대신 자릿수만 적어야 합니다.
계산 방법
- 1m과 n을 고릅니다.
- 2A(m, n)의 값을 확인합니다.
- 3닫힌 식으로 계산한 값과 같은지 봅니다.
- 4정의를 그대로 따라갈 때의 호출 횟수와 스택 깊이를 확인합니다.
- 5m을 하나씩 올려 값이 어떻게 폭발하는지 표에서 봅니다.
자주 묻는 질문
A(0, n) = n + 1, A(m, 0) = A(m−1, 1), A(m, n) = A(m−1, A(m, n−1)) 세 줄로 정의되는 함수입니다. 1928년 빌헬름 아커만이 내놓았고, 계산 가능하면서도 원시재귀가 아닌 첫 예로 알려져 있습니다.
반복 횟수를 미리 정해 놓는 루프만 아무리 겹쳐 써도 이만큼 빨리 자라는 함수를 만들 수 없다는 뜻이기 때문입니다. 그전까지는 「계산 가능하다」와 「원시재귀다」가 같은 말이라고 여겼는데, 아커만 함수가 그것을 깼습니다.
연산이 한 단계씩 올라갑니다. A(1, n) = n + 2로 더하기, A(2, n) = 2n + 3으로 곱하기, A(3, n) = 2^(n+3) − 3으로 거듭제곱, A(4, n) = 2↑↑(n+3) − 3으로 거듭제곱탑입니다. 더하기가 반복되면 곱하기가 되고, 곱하기가 반복되면 거듭제곱이 되는 그 사다리를 그대로 올라갑니다.
2^65536 − 3이고 십진수로 19,729자리입니다. A(4, 3)은 그 자체가 지수인 수라 우주의 모든 입자에 한 자리씩 적어도 자리가 모자랍니다. m을 5로 올리면 A(5, 0) = 65,533부터 시작해 더 빨리 폭발합니다.
정의를 그대로 재귀로 옮기면 A(3, 8) 정도에서 벌써 호출 깊이가 2,000을 넘어 브라우저가 죽기 때문입니다. 이 도구는 아직 처리하지 못한 m들을 배열에 쌓아 두는 방식으로 같은 계산을 합니다. 결과는 같고, 호출 횟수를 세기도 쉽습니다.
아커만 함수를 뒤집은 것으로, 믿기지 않을 만큼 천천히 자랍니다. 실제 우주에서 나올 법한 어떤 입력에서도 5를 넘지 않아 사실상 상수처럼 다룹니다. 유니온–파인드 자료구조의 시간복잡도에 이 함수가 등장합니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 정답지는 닫힌 식입니다. m ≤ 2는 n = 0~20 전부에서, m = 3은 n = 0~8에서 정의를 그대로 따라간 값과 2^(n+3) − 3이 일치하는 것을 검사합니다. 원리가 겹치지 않는 두 경로라 한쪽이 틀리면 바로 드러납니다.
- A(2, 5) = 13, A(3, 3) = 61, A(3, 4) = 125, A(4, 0) = 13 같은 알려진 값들을 표로 고정했습니다.
- A(4, 1) = 65,533과 A(4, 2) = 2^65536 − 3(19,729자리)을 검산값으로 넣었습니다.
- 호출 횟수도 검사합니다. A(3, 3)은 2,432번, A(3, 8)은 값이 2,045뿐인데 호출이 278만 번을 넘습니다. n이 하나 늘 때마다 호출이 두 배 넘게 늘어나는 것도 확인합니다.
- A(4, 1)을 정의대로 따라가면 호출이 2,862,984,010번입니다. 이 구현으로 실제 세어 본 값이며 문헌에 실린 값과 같습니다. 브라우저에서 돌릴 양이 아니므로 이 도구는 300만 번에서 멈추고 닫힌 식으로 답합니다.
- 자릿수는 비트 수에 log10 2를 곱하는 흔한 어림 대신 정확히 셉니다. 그 어림법은 10이나 99처럼 10의 거듭제곱 언저리에서 한 자리씩 틀립니다.
- m은 4까지, n은 30까지 다룹니다. m = 5부터는 A(5, 0) = 65,533이라 정의를 따라가는 것도 닫힌 식을 적는 것도 뜻이 없습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.