Profundidad de Recursion C # – Que tan profundo puedes ir

¿Hay algún control sobre cuánto puede llamar recursivamente algo?

De un progtwig de prueba básico obtengo una profundidad de recursión de algo más de 18k

que depende del tamaño de stack …

¿Hay alguna forma de configurar un trozo de memoria (quizás un hilo) con una stack masiva para boost la profundidad de recursión?

Aumenté el tamaño de la stack durante el reconocimiento de algunos documentos. Fue realmente necesario.

Entonces puedes boost el tamaño de stack para el hilo usando el siguiente código:

var stackSize = 10000000; Thread thread = new Thread(new ThreadStart(BigRecursion), stackSize); 

Thread (ThreadStart, Int32) – Inicializa una nueva instancia de la clase Thread, especificando el tamaño máximo de stack para el hilo.

Fuente

Espero que esto sea lo que necesitas.

Creo que arriesgas problemas aquí. Es difícil determinar exactamente cuánta stack usará un algoritmo recursivo. Y, si estás al punto donde hay alguna pregunta sobre si habrá suficiente, buscaría otro enfoque.

La mayoría de los algoritmos recursivos podrían reescribirse para que no sean recursivos. A continuación, puede asignar tanta memoria como necesite e incluso recuperar con gracia si no es suficiente.

El tamaño de stack predeterminado se almacena en el encabezado PE.

Si genera el hilo usted mismo, Thread tiene un constructor que toma el tamaño de la stack como un parámetro.

Sin embargo, el tamaño de stack .NET predeterminado de 1 MB debería ser suficiente para la mayoría de las tareas, por lo que antes de cambiarlo, al menos debería revisar la tarea.

Incluso si logra obtener mayores profundidades de recursión, simplemente por razones de rendimiento implementaría este algoritmo sin recurrencia. Las llamadas a métodos son mucho más caras que las iteraciones dentro de un ciclo while. Recomiendo encarecidamente que no se implemente nada que requiera manipular el tamaño predeterminado de la stack.

De vez en cuando uso recursividad, pero solo cuando la profundidad de la llamada está definida y baja (como en menos de 100). Cuando se crea un software comercial, el uso de algoritmos recursivos que tienen un número indefinido de iteraciones es completamente poco profesional y es probable que le genere clientes muy enojados.