問題 No.2205
再帰呼び出しにおいて、自分自身を呼び出す処理が関数の実行過程の途中に存在し、その呼び出しが完了した後に残りの演算や後続の処理を行う方式を指す用語はどれか。
【正解の解説】
非末尾再帰呼び出し
これはレストランのコース料理で「メインを食べた後にデザートを残している状態」に似ています。関数が自分を呼び出した後、その結果を使ってさらに計算をしなければならないため、途中の記憶(コンテキスト)をメモ用紙のように積み上げて覚えている必要があり、メモリを消費しやすいという特徴があります。
スポンサーリンク
【その他の選択肢の解説】
末尾再帰呼び出し
これは階段をただ一方向に降りていき、最後に目的地へ着いたらそこで終わりという状態です。非末尾再帰と違って戻ってきた後の処理がないため、コンピューターは過去の記憶を保持する必要がなく、メモリを節約できるという大きなメリットがあります。
相互再帰呼び出し
これはAさんがBさんに仕事を頼み、Bさんが「それはAさんに返そう」とまた投げ返すようなピンポン関係に似ています。自分自身を直接呼び出す単体の再帰とは異なり、関数Aが関数Bを呼び、その関数Bが再び関数Aを呼び出すような循環的な構造を指す用語です。
多重再帰呼び出し
これは株分けのように、1つの処理から「枝分かれして」何個も自分を呼び出すフィボナッチ数列の計算などがこれに該当します。問題文にあるような「途中で呼び出して後続の演算があるか」という順序の話ではなく、呼び出す回数や分岐の多さに着目した用語です。