C# AI プログラムの場合、再帰呼び出しを使用して次の最適な動きを見つけます (30x30 配列を使用して現在のボードの状態を保存します)。私が行う各動きについて、新しいボードの状態から行うことができる可能な動きのどれが最良になるかを確認したい...など、「ゲームの終わり」の位置に到達するまで (それ以上の動きは不可能)状態) またはタイマーがプロセスを停止し、それ以上の再帰呼び出しは行われません (そして、「最適な」既知の位置が返されます)。これは、再帰を使用する必要がある理由 (末尾再帰ではない) を説明するためのものであり、単一の (グローバル) ボード状態を使用することはできず、現在の状態から可能なすべてのボード状態を検索する必要があります。
(ときどき) System.StackOverflowException が発生します。次の再帰呼び出しの前に利用可能なスタック領域を確認する方法はありますか? 次に、現在の状態を「これまでに見つかった最良の位置」として返すだけで、次の再帰呼び出しを行うことはできません。つまり、利用可能なスタックが小さくなりすぎた場合も、基本ケースとしてカウントする必要があります。
もちろん、他のオプションは、各再帰呼び出しを try..catch ブロックに入れ、それを基本ケースとして使用して System.StackOverflowException を処理することでしょうか?