对于C#AI程序,我使用递归调用来查找最佳的下一步(使用30x30阵列来存储当前的板状态).对于我所做的每一个动作,我想看看我可以从新的棋盘状态中做出哪些可能的动作将是最好的...依此类推,直到我达到"游戏结束"的位置(此时无法进一步移动)状态)或计时器停止进程并且不再进行进一步的递归调用(并且返回"最佳"已知位置).这只是为了解释为什么我必须使用递归(它不是尾递归)而且我不能使用单个(全局)电路板状态,但必须从当前状态搜索所有电路板状态.
(有时)我得到一个System.StackOverflowException.有没有办法在下一次递归调用之前检查可用的堆栈空间?然后我可以将当前状态作为"到目前为止找到的最佳位置"返回,而不是进行下一次递归调用.即,当可用堆栈变得太小时,它也应该算作基本情况.
当然,另一个选择可能是将每个递归调用放在try..catch块中并使用它作为基本情况来处理System.StackOverflowException?