Qu'est-ce qu'un appel récursif?
En programmation, un appel récursif est une commande dans un sous-programme ou une fonction qui indique au programme de réexécuter le même sous-programme. La répétition peut être le résultat direct de la fonction ou une deuxième fonction peut être déclenchée, laquelle renvoie à son tour à la première fonction. Un appel récursif présente certaines similitudes avec la boucle infinie redoutée, mais le sous-programme a toujours une instruction conditionnelle qui indique au programme quand il faut arrêter de répéter la récursion.
Le concept de récursion est peut-être mieux illustré par l'utilisation d'un exemple. Supposons qu'un couvreur applique de nouveaux bardeaux à une maison. Pour commencer, il doit porter un paquet de bardeaux sur le toit. Une fois le premier paquet cloué, il doit descendre l’échelle, récupérer un autre paquet et le clouer. Le processus se poursuit par une série de "go, fetch, return" jusqu'à ce que le dernier bardeau ait été appliqué. À ce stade, le couvreur est libre de passer au travail suivant ou de rentrer chez lui.
Bien que l'exemple soit une simplification excessive, il contient tous les éléments d'un appel récursif. Il y a un point de départ, le couvreur doit récupérer ce dont il a besoin, revenir au début et, lorsque la condition finale est remplie, s’arrêter. C'est essentiellement ce que le programme fait; il commence, met en œuvre une action, revient à lui-même et se termine lorsque la condition de fin se produit.
La condition de fin est appelée cas de base. C'est essentiel pour tous les appels récursifs; sans elle, la fonction continuerait à se répéter. Au mieux, cela se traduit par un épuisement des ressources mémoire du système. Normalement, la surcharge bloque le programme à un moment donné, mais au moment où le problème est découvert, des dommages importants peuvent être causés.
Les programmeurs expérimentés peuvent reconnaître la similitude entre un appel récursif et une boucle "pour" ou "en". Si, par exemple, l’objectif est de trouver le nombre total d’inventaire de tous les stocks dont le numéro de pièce est supérieur à 999, une boucle "pour" indique au programme de localiser toutes les instances qualifiantes et une boucle "while" indique au programme de l’exécuter. seulement tant que la condition indiquée est valide. On pourrait dire qu'un appel récursif combine certaines des caractéristiques de ces boucles avec une instruction "if-then-else"; si cette condition est vraie, faites ceci ou bien faites quelque chose de différent si la condition est fausse. Toutefois, la récursivité autorise généralement un code plus compact et permet de transmettre le problème à la fonction plus près du point où il est nécessaire.