問題 No.1767
プログラム内で再帰呼び出しを行う際に、無限再帰を防ぐ目的で必ず実装する必要がある条件はどれか。
【正解の解説】
これ以上自分自身を呼び出さずに処理を終了させるための終了条件
ロシアの伝統人形マトリョーシカを次々と開けていくとき、一番小さな人形にたどり着いたら開けるのをストップする「一番小さな人形」にあたるのがこの終了条件です。終わりを決めておかないと永遠に開け続けてしまうため、プログラムの世界でも必ず出口のルールを設ける必要があります。
スポンサーリンク
【その他の選択肢の解説】
メモリ消費量を一定に抑えてスタック領域の枯渇を防ぐための容量制限条件
メモリが溢れるのを防ぐ仕組みはOSや実行環境のメモリ管理機能の役割であり、プログラム側で無限再帰を止める本質的な解決策にはなりません。容量を制限しても終了条件がなければエラーの発生が遅れるだけで、根本的な解決にならない点に注意が必要です。
親関数から渡された引数の値を書き換えずに維持するための不変条件
関数型言語などで使われる「変数を書き換えない性質(イミュータブル)」に関する説明です。データの安全性を高める仕組みですが、これがあっても自分自身を呼び出し続ける動き自体は止まらないため、無限再帰を防ぐ目的としては的外れになります。
呼び出し回数をあらかじめカウントして指定値に達した時点で停止させる制御変数
一見するとループを止めるのに有効そうに思えますが、再帰の深さが入力データによって動的に変わるプログラムでは、何回で終わるかを事前予測して固定することは困難です。終了条件ではなくただの回数制限を設けると、途中で処理が強制中断されるバグの原因になります。