Récursion infinie

Définition, exemples et bonnes pratiques

À retenir

  • Provoque une erreur de type Stack Overflow (dépassement de la pile de mémoire).
  • Est causée par l'absence ou l'invalidité d'une condition d'arrêt.
  • Consomme les ressources de la mémoire vive de manière exponentielle.

Une récursion infinie se produit lorsqu'une fonction informatique s'appelle elle-même sans jamais s'arrêter. Imaginez deux miroirs face à face qui créent une galerie de reflets sans fin : le programme s'enfonce de plus en plus profondément dans ses propres instructions jusqu'à ce que l'ordinateur n'ait plus assez de mémoire pour continuer et finisse par planter.

Étymologie

Le terme vient du latin recurrere (« revenir en arrière ») et de infinitus (« sans limites »). En informatique, cela désigne l'échec d'un algorithme récursif qui ne parvient pas à atteindre son point de sortie.

Exemples d'usage

  • Une fonction compter() qui appelle compter() sans vérifier si elle a atteint zéro.
  • Un script qui tente de lister les fichiers d'un dossier contenant un raccourci pointant sur lui-même, créant un cercle vicieux.

Cas d'usage

Ce concept intervient lors du développement de logiciels utilisant des algorithmes récursifs (comme le tri de données ou le parcours d'arbres généalogiques). C'est presque toujours considéré comme un bug critique.

Bonnes pratiques

Il est impératif de toujours définir un cas de base (la condition de sortie) avant même d'écrire l'appel récursif. Il faut aussi s'assurer que chaque étape de la récursion rapproche bien le programme de cette condition de sortie.

Synonymes

récursivité infinie boucle récursive sans fin

Antonymes

récursion finie cas de base terminaison

Conseil

Pour éviter ce problème quand vous débutez, essayez de dessiner le chemin de votre fonction sur papier. Si vous ne voyez pas de porte de sortie claire, votre code risque de s'enfermer dans une récursion infinie.

Questions fréquentes

Pourquoi le programme plante-t-il au lieu de tourner à l'infini ?

Chaque appel de fonction est stocké dans une zone mémoire appelée la 'pile'. Comme cette mémoire est limitée, elle finit par saturer, ce qui provoque l'arrêt immédiat du programme.

Quelle est la différence avec une boucle infinie ?

Une boucle infinie répète des instructions sans fin mais reste au même 'niveau' de mémoire, tandis qu'une récursion infinie empile des couches d'appels jusqu'à l'effondrement de la pile.