Para un programa C# AI utilizo una llamada recursiva para encontrar el mejor movimiento siguiente (usando una matriz 30x30 para almacenar el estado actual de la placa). Por cada movimiento que haga, quiero ver cuál de los movimientos posibles que puedo hacer desde el nuevo estado de la tabla será el mejor ... y así sucesivamente hasta que llegue a una posición de "fin del juego" (no hay más movimientos posibles en ese estado) o un temporizador detiene el proceso y no se realizan más llamadas recursivas (y se devuelve la "mejor" posición conocida). Esto solo para explicar por qué debo usar recursividad (no es recursividad de cola) y no puedo usar un solo estado de placa (global), pero debo buscar todos los estados de tabla posibles desde el estado actual.¿Hay alguna manera de verificar el tamaño de pila disponible antes de una llamada recursiva? (C#)
(A veces) Obtengo una System.StackOverflowException. ¿Hay alguna manera de verificar el espacio de pila disponible antes de la próxima llamada recursiva? Entonces podría simplemente devolver el estado actual como "la mejor posición encontrada hasta el momento" y no hacer la próxima llamada recursiva. Es decir. cuando la pila disponible se vuelve demasiado pequeña, también debería contar como caso base.
La otra opción, por supuesto, puede ser simplemente poner cada llamada recursiva en un bloque try..catch y manejar System.StackOverflowException usándolo como caso base?
¿Rediseñar su código? Un stackoverflow es un signo de un código de error o mal (C#). Necesita una gran cantidad de llamadas recursivas para activar un stackoverflow. Use un lenguaje funcional que soporte llamadas de cola, como F #, si realmente desea hacerlo de esta manera. C# no está diseñado para eso. – Dykam
"Si llama a un método recursivo o planea usar mucho espacio de pila, debe usar el método RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup". - http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.runtimehelpers.probeforsufficientstack.aspx – DavidO