Ackermann 함수는 원시 재귀 적이 지 않은 계산 가능한 총 함수 중 가장 간단한 예 중 하나로 유명합니다.
우리는 A(m,n)
음이 아닌 두 정수 를 취하는 정의를 사용합니다 .
A(0,n) = n+1
A(m,0) = A(m-1,1)
A(m,n) = A(m-1,A(m,n-1))
구현할 수 있습니다
- 두 개의 정수를 입력으로 사용하여 정수를 반환하는 명명 된 또는 익명 함수
- STDIN에서 공백 또는 개행으로 구분 된 두 정수를 가져 와서 결과를 STDOUT에 인쇄하는 프로그램.
라이브러리에서 Ackermann 함수 또는 hyperexponentiation 함수 (있는 경우)를 사용할 수 없지만 다른 라이브러리에서 다른 함수를 사용할 수 있습니다. 정기적 인 지수가 허용됩니다.
함수는 A(m,n)
1 분 이내에 m ≤ 3 및 n ≤ 10 의 값을 찾을 수 있어야합니다 . 적어도 이론적 으로는 다른 입력에서 끝나야합니다. 무한 스택 공간, 기본 Bigint 유형 및 임의로 긴 기간이 주어지면 답을 반환합니다. 편집 : 언어의 기본 재귀 수준이 너무 제한적인 경우 문자 비용없이 언어를 다시 구성 할 수 있습니다.
문자 수가 가장 적은 제출물이 이깁니다.
답을 확인하기위한 몇 가지 값은 다음과 같습니다.
A | n=0 1 2 3 4 5 6 7 8 9 10
-----+-----------------------------------------------------------------
m=0 | 1 2 3 4 5 6 7 8 9 10 11
1 | 2 3 4 5 6 7 8 9 10 11 12
2 | 3 5 7 9 11 13 15 17 19 21 23
3 | 5 13 29 61 125 253 509 1021 2045 4093 8189
4 | 13 65533 big really big...
A(3,8)
다른 언어 처럼 순진하게 초과하면 어떻게됩니까? 비 재귀 솔루션을 만들어야합니까, 아니면이 경우 "무한 스택 공간을 가정"할 수 있습니까? 꽤 확신합니다. 1 분 안에 종료됩니다.