Maison > Article > développement back-end > Les fonctions récursives peuvent-elles être intégrées ?
Inlining de fonctions récursives
C'est une idée fausse courante selon laquelle les fonctions récursives ne peuvent pas être intégrées. Cependant, les compilateurs peuvent effectivement intégrer des fonctions récursives, mais avec certaines considérations.
Qualificateur en ligne par rapport à l'optimisation du compilateur
Le spécificateur en ligne sur une fonction n'est qu'un indice sur le compilateur. Le compilateur a le dernier mot quant à l'intégration ou non de la fonction, quel que soit le qualificatif en ligne.
Décision d'intégration du compilateur
Un compilateur décide d'intégrer ou non une fonction en fonction sur des facteurs tels que :
Exemple d'optimisation en ligne
Considérez la fonction factorielle récursive suivante :
<code class="cpp">inline int factorial(int n) { if (n <= 1) return 1; else return n * factorial(n - 1); }</code>
Un compilateur d'optimisation pourrait potentiellement intégrer cette fonction à un certain niveau, comme le montre le code optimisé suivant :
<code class="cpp">int factorial(int n) { if (n <= 1) return 1; else { int n2 = n - 1; if (n2 <= 1) return n * 1; else { int n3 = n2 - 1; if (n3 <= 1) return n * n2 * 1; else return n * n2 * n3 * factorial(n3 - 1); } } }</code>
Dans ce cas, le compilateur a déroulé la fonction factorielle trois fois, insérant effectivement une partie des appels récursifs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!