問題

(出典:日本技術士会のホームページ 過去問題(第一次試験) 基礎科目 令和7年度)
コーチング対話解答

マナブ先生ツトムさんは、アッカーマン関数というのは知っていましたか?



私はこの問題を見るまで知りませんでした
過去10年間にも出題されていませんでした。
式を見ているだけではどう取り組んでいいのかわかりませんね。



この問題は「難しい計算」をする問題ではなく、
定義を順番に丁寧にたどれるかを見ています。
数個の数字を入れるだけではよくわからないので、もう少し多くしてみましょう。
\(m\)と\(n\)が出てきていますので、\(m\)行、\(n\)列の表を作って順次求めていきましょう。



こうですか。
| \(m\)|\(n\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 0 | ||||||||||
| 1 | ||||||||||
| 2 | ||||||||||
| 3 | ||||||||||
| 4 | ||||||||||
| 5 |



求める答えが\(A\)(2,2)なので、それほど大きくなくていいですね。
与えられた定義式を見てどれぐらいでいいか考えてみてください。



入り組んでいるように見えるのでよくわかりませんが、
とりあえず、この程度にしておきます。
| \(m\)|\(n\) | 0 | 1 | 2 | 3 | 4 | 5 |
| 0 | ||||||
| 1 | ||||||
| 2 |



そうですね。足らなければ付け加えればいいですし、余れば放置しておけばいいですからね。
そして、➀の式から\(m=0\)の行を埋めてみましょう。



はい。
| \(m\)|\(n\) | 0 | 1 | 2 | 3 | 4 | 5 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | ||||||
| 2 |



これはとても簡単で、これからどうなるか全くわかりませんね。
すると、次は②の関係式を使って\(n=0\)の列を埋めてみるのですね。
とりあえず、\(A(1,0)=A(0,1)=2\) ということしかわかりませんが。
次は③の関係式を使って、\(A(1,1)=A(0,A(1,0))=A(0,2)=3\) となりますね。
\(A(1,2)=A(0,A(1,1))=A(0,3)=4\) になります。
\(A(1,n)\)には表の右上の数字が入るようですね。
残りもそのようにして埋めます。
| \(m\)|\(n\) | 0 | 1 | 2 | 3 | 4 | 5 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 2 |



\(A(1,n)\)はそうですが、次からはそれほど簡単ではないですよ。
\(m=2\)の行を計算してみましょう。



するとまた②を使って、\(A(2,0)=A(1,1)=3\) がわかります。
ここで③の関係式を使うと、\(A(2,1)=A(1,A(2,0))=A(1,3)=5\)
そうですね。右上の4ではなく、5になりましたね。



あと一歩ですね。



\(A(2,2)=A(1,A(2,1))=A(1,5)=7\) となります。
| \(m\)|\(n\) | 0 | 1 | 2 | 3 | 4 | 5 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 2 | 3 | 5 | 7 |



答えは➀ 7 ですね。



そうですね。
アッカーマン関数は計算量理論の研究においては重要な役割を果たしています。
本来アッカーマン関数は急激に増加する数字を作り出すために用いられるようですが、問題に出たのは、その最初の部分ですので、関数への値の代入についての考え方を問う問題として出題されたのでしょうね。
この後、急激に数字が大きくなっていきます。



手計算ではこれ以上はやりたくないですね。

