アッカーマン関数

アッカーマン関数（アッカーマンかんすう、、）とは、非負整数 "m" と "n" に対し、
によって定義される関数のことである。
与える数が大きくなると爆発的に計算量が大きくなるという特徴があり、性能測定などに用いられることもある。
また、数学的な意味として、原始再帰関数でないμ再帰関数の実例として有名である。これを（再帰呼出しのない手続き型の）プログラミング言語の言葉で言えば、アッカーマン数をプログラムで計算することはできるが、While文を使わずFor文のみでそれを計算することができない、ということになる。
歴史.
1920年代後半、数学者ダフィット・ヒルベルトの教導を受けていた学生だったとヴィルヘルム・アッカーマンは、計算の基礎を研究していた。ヒルベルトは、すべての計算可能関数が 原始再帰的であると仮定していた。簡単に言えば、これは、コンピューターで計算できる各関数をいくつかの非常に単純なルールからまとめて、計算の期間を事前に推定できることを意味する。実際にこれは人々が利用するほとんどの関数に適用出来るが、2人の研究はそれを覆した。
1927年に、スーダンはスーダン関数を発表した。それとは独立に、1928年アッカーマンは自分の生み出した関数 formula_2 を公表する。その関数は3つの引数を必要とし formula_3 の様に表記された。スーダンとアッカーマンの双方が全域計算可能関数（いくつかの参考文献では単純に "再帰的"と呼ばれる）でありながら原始再帰的でない関数の発見に功績が有ったと信じられている。
ヒルベルトは"Über das Unendliche"の中でアッカーマン関数が原始再帰的では無いと仮定したが、この仮説は彼の個人秘書となっていたアッカーマンによって実際に証明され、ヒルベルトの執筆した実数の論文上に掲載された。
2変数形式に単純化されたアッカーマン関数は、1935年によって開発された。
概念.
アッカーマンが1928年に発表した3変数の関数は次のような定義である：
formula_4
この関数において、formula_5 は formula_6 を 回繰り返すことによって定義されていることがわかる。すなわち、
formula_7
となるように定義されている。
アッカーマン関数の値の表.
アッカーマン関数の計算は、無限の表を使った手順に言い換えることができる。まず、一番上の列に自然数を1から順番に並べる。表の値を決めるためは、すぐ左の値を見て、一つ上の列でその順番の値を取る。もし左に数値がない場合は、単に一つ上の列のカラム 1 ("n" = 1) の数値を取る。
計算できる範囲で具体的な数値に置き換えていくと、表は次のようになる。
! "m""n"
! 0
! 1
! 2
! 3
! 4
! n
! 0
! 1
! 2
! 3
! 4