Share via


Procédures récursives

Mise à jour : novembre 2007

Une procédure récursive est une procédure qui s'appelle elle-même. En général, il ne s'agit pas de la façon la plus efficace pour écrire du code Visual Basic.

La procédure suivante utilise la récurrence pour calculer la factorielle de son argument d'origine.

Function factorial(ByVal n As Integer) As Integer
    If n <= 1 Then
        Return 1
    Else
        Return factorial(n - 1) * n
    End If
End Function

Considérations sur les procédures récursives

Conditions de limitation Vous devez concevoir une procédure récursive à tester pour au moins une condition qui peut mettre fin à la récurrence, et vous devez également gérer les situations pour lesquelles aucune de ces conditions n'est satisfaite pour un nombre raisonnable d'appels récursifs. Si aucune condition ne peut être satisfaite sans erreur, votre procédure s'expose à un risque élevé d'exécution dans une boucle infinie.

Utilisation de la mémoire. Votre application dispose d'un espace limité pour les variables locales. Chaque fois qu'une procédure s'appelle elle-même, elle utilise davantage d'espace pour les copies supplémentaires de ses variables locales. Si le processus se poursuit indéfiniment, il peut se produire une erreur StackOverflowException.

Efficacité. Vous pouvez presque toujours remplacer la récurrence par une boucle. Une boucle ne possède pas la charge mémoire pour passer des arguments, initialiser le stockage supplémentaire et retourner des valeurs. Votre performance peut être considérablement améliorée sans appels récurrents.

Récurrence mutuelle Vous pouvez observer une performance médiocre ou même une boucle infinie si deux procédures s'appellent l'une et l'autre. Ce type de conception présente les mêmes problèmes qu'une procédure récursive simple, mais peut être plus difficile à détecter et à déboguer.

Appel avec parenthèses. Lorsqu'une procédure Function s'appelle de manière récursive, le nom de cette procédure doit être suivi de parenthèses, même s'il n'y a pas de liste d'arguments. Sinon, le nom de la fonction est considéré comme sa valeur de retour.

Test Si vous écrivez une procédure récursive, vous devez la tester soigneusement afin de vous assurer qu'elle satisfait toujours certaines conditions de limitation. Vous devez également veiller à toujours disposer d'une mémoire suffisante en dépit du grand nombre d'appels récurrents.

Voir aussi

Tâches

Procédures de dépannage

Dépannage des exceptions : System.StackOverflowException

Concepts

Procédures dans Visual Basic

Sub, procédures

Function, procédures

Procédures Property

Procédures d'opérateur

Paramètres et arguments d'une procédure

Surcharge de procédure

Structures de boucle

Référence

StackOverflowException