Erreur Python : RecursionError

NSI Terminale

Définition

La `RecursionError` survient quand une fonction récursive s'appelle elle-même trop de fois sans jamais s'arrêter, dépassant la limite de profondeur d'appels fixée par Python (1000 par défaut). Le message exact est `RecursionError: maximum recursion depth exceeded`. La cause la plus fréquente est un cas de base manquant ou jamais atteint : la récursion ne se termine pas et empile les appels jusqu'à saturation.

Exemple corrigé

Énoncé

Voici un code qui déclenche cette erreur :

```python
def factorielle(n):
return n * factorielle(n - 1)

print(factorielle(5))
```

```
RecursionError: maximum recursion depth exceeded
```

Solution

La fonction `factorielle` n'a aucun cas de base : elle s'appelle indéfiniment avec `n - 1`, qui passe par 0, puis devient négatif sans jamais s'arrêter. Python finit par dépasser sa limite de profondeur de récursion.

Il faut ajouter une condition d'arrêt (le cas de base) qui renvoie une valeur sans relancer d'appel récursif.

Code corrigé :

```python
def factorielle(n):
if n <= 1: # cas de base : on arrête la récursion
return 1
return n * factorielle(n - 1)

print(factorielle(5)) # affiche 120
```

Le bon réflexe : dans toute fonction récursive, vérifie qu'il existe un cas de base atteignable et que chaque appel se rapproche bien de ce cas.

Erreurs classiques

  • Oublier le cas de base : c'est la cause numéro un. Sans condition `if` qui renvoie une valeur, la fonction ne s'arrête jamais.
  • Un cas de base jamais atteint : par exemple `factorielle(n - 1)` avec un appel sur un flottant ou un nombre négatif qui « rate » la condition `n == 0` (préférer `n <= 1`).
  • Ne pas confondre avec une vraie boucle infinie : ici Python finit par s'arrêter et lever l'erreur, alors qu'une boucle `while True` tournerait sans fin sans message.

Toutes les notions