Profondeur de la récursion C # – À quelle profondeur pouvez-vous aller

Y a-t-il un contrôle sur combien vous pouvez appeler récursivement quelque chose?

A partir d’un programme de test de base, j’ai une profondeur de récursion d’un peu plus de 18k

qui dépend de la stacksize ….

existe-t-il un moyen de configurer un morceau de mémoire (peut-être un thread) avec une stack massive pour augmenter la profondeur de la récursivité?

J’ai augmenté la taille de la stack lors de la reconnaissance de certains documents. C’était vraiment nécessaire.

Vous pouvez donc augmenter la taille de la stack pour le thread en utilisant le code suivant:

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

Thread (ThreadStart, Int32) – Initialise une nouvelle instance de la classe Thread, en spécifiant la taille de stack maximale du thread.

La source

J’espère que c’est ce dont vous avez besoin.

Je pense que vous risquez des problèmes ici. Il est difficile de déterminer exactement la quantité de stack utilisée par un algorithme récursif. Et si vous en êtes à la question de savoir s’il y en aura assez, je chercherai une autre approche.

La plupart des algorithmes récursifs pourraient être réécrits pour ne pas être récursifs. Vous pouvez alors allouer autant de mémoire que vous avez besoin et même récupérer en douceur si cela ne suffit pas.

La taille de stack par défaut est stockée dans l’en-tête PE.

Si vous lancez le thread vous-même, Thread a un constructeur qui prend la taille de la stack comme paramètre.

Cependant, la taille de la stack .NET par défaut de 1 Mo devrait suffire pour la plupart des tâches. Par conséquent, avant de la modifier, vous devez au moins examiner la tâche.

Même si vous parvenez à obtenir de plus grandes profondeurs de récursivité, simplement pour des raisons de performances, j’implémenterais cet algorithme sans récursivité. Les appels de méthode sont beaucoup plus coûteux que les itérations dans une boucle while. Je déconseille fortement de mettre en œuvre tout ce qui nécessite de manipuler la taille de stack par défaut.

J’utilise occasionnellement la récursivité mais seulement lorsque la profondeur de l’appel est définie et faible (comme dans moins de 100). Lors de la création de logiciels commerciaux, l’utilisation d’algorithmes récursifs comportant un nombre indéfini d’itérations est totalement non professionnelle et susceptible de vous donner des clients très en colère.