Qu'est-ce qu'un appel récursif?
Dans la programmation, un appel récursif est une commande dans un sous-programme ou une fonction qui indique au programme d'exécuter à nouveau le même sous-programme. Les performances de répétition peuvent être le résultat direct de la fonction, ou une deuxième fonction peut être déclenchée qui, à son tour, se réfère à la première fonction. Un appel récursif a des similitudes avec la boucle infinie redoutée, mais le sous-programme a toujours une déclaration conditionnelle qui indique au programme quand arrêter de répéter la récursivité.
Le concept de récursivité est peut-être mieux illustré grâce à l'utilisation d'un exemple. Supposons qu'un couvreur applique de nouveaux bardeaux à une maison. Pour commencer, il doit transporter un paquet de bardeaux sur le toit. Une fois qu'il a cloué le premier paquet en place, il doit descendre l'échelle, récupérer un autre paquet et le clouer en place. Le processus se poursuit comme une série de "Go, Fetch, Return" jusqu'à ce que le dernier bardeau soit appliqué. À ce stade, le couvreur est libre de passer au poste suivant ou de rentrer chez lui.
bien que l'exemple is 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, arrêtez-vous. C'est essentiellement ce que fait le programme; Il démarre, met en œuvre une action, revient sur lui-même et se termine lorsque la condition de fin se produit.
La condition de fin est appelée le cas de base. Il est essentiel pour tous les appels récursifs; Sans cela, la fonction continuerait de se répéter. Au mieux, cela se traduit par la vidange des ressources de mémoire du système. Normalement, la surcharge écrasera 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 pourraient reconnaître la similitude entre un appel récursif et une boucle "pour" ou "tandis". Si, par exemple, l'objectif est de trouver le nombre total d'inventaires de tous les stocks avec la partie NUmbers supérieur à 999, une boucle "pour" indique au programme de localiser toutes les instances de qualification et une boucle "while" indique au programme d'exécuter la boucle uniquement pendant que la condition indiquée est valide. On pourrait dire qu'un appel récursif combine certaines des fonctionnalités de ces boucles avec une déclaration "if-then-else"; Si cette condition est vraie, faites-le, ou bien de faire quelque chose de différent si la condition est fausse. La récursivité permet généralement un code plus compact et permet de passer le problème à la fonction plus près du point qu'il est nécessaire.