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