Question

Lors de l’écriture de code VC++ de qualité production, l’utilisation de la récursivité est-elle acceptable ?Pourquoi ou pourquoi pas?

Était-ce utile?

La solution

Existe-t-il un moyen de déterminer à quel moment je rencontrerais un débordement de pile ?

Pas vraiment.Un débordement de pile se produit lorsque vous épuisez l'espace de pile - cependant...

  • La taille initiale de la pile peut être modifiée par programme et peut être par défaut différente en fonction de votre système d'exploitation/compilateur/etc.
  • La quantité déjà utilisée dépend de ce que votre application (et des bibliothèques qu'elle utilise) a déjà fait - cela est souvent impossible à prédire.
  • La quantité de pile requise par chaque appel dépend de ce que vous faites dans votre fonction.Si vous n'allouez qu'un seul entier sur la pile, vous pourrez peut-être récurer un nombre énorme de fois, mais si vous allouez un tampon de 200 000 sur la pile, pas tellement.

Les seules fois où j'en ai touché un, c'est dans une boucle infinie ou en utilisant le tampon de 200 000 kilogrammes susmentionné.

Je trouve qu'il est de loin plus préférable que mon application plante simplement, plutôt que de boucler pour toujours en utilisant 100 % du processeur et de devoir être tuée de force (il s'agit d'un bon PITA sur un serveur distant sur une mauvaise connexion car Windows manque de SSH)

Une ligne directrice approximative :Pensez-vous que votre fonction récursive est susceptible de s'appeler plus de 10 000 fois de suite ?Ou faites-vous quelque chose de stupide, comme allouer 200 000 tampons sur la pile ?

Si oui, souciez-vous-en.
Si non, passez à des choses plus importantes.

Autres conseils

Oui.Mais jamais dans du code mort.Ce serait idiot.

Bien sûr - par ex.si vous souhaitez parcourir une structure arborescente, qu'utiliseriez-vous d'autre ?

Peut-être aimeriez-vous avoir quelque chose comme une profondeur maximale pour être sûr de ne pas écrire une boucle infinie.(si cela a du sens dans votre exemple)

Existe-t-il un moyen de déterminer à quel moment je rencontrerais un débordement de pile?

Cela dépend de la profondeur à laquelle vous allez et de l'ampleur de la récursion réelle.Je suppose que vous comprenez ce que fait la récursivité ?

La récursivité est presque essentielle pour parcourir les structures de fichiers telles que les dossiers/répertoires.

Traverser une structure arborescente est très facile si la récursivité est utilisée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top