Najah.
Mon plan de révision⚡ Défi flash

Informatique · Classes prépa (CPGE) — 1ère année — ECS

Récursivité

Le cours expliqué simplement, les questions que tous les élèves se posent et des exercices type examen national. Programme marocain, gratuit.

📘 Fiche de cours

L'essentiel du cours

La récursivité est une méthode de programmation où une fonction s'appelle elle-même. Pour qu'elle soit valide, elle doit comporter :

  1. Un cas de base : condition d'arrêt qui retourne une valeur sans appel récursif.
  2. Un cas récursif : appel de la fonction avec des paramètres qui se rapprochent du cas de base. La structure générale en Python est :
def f(n):
    if condition_base:
        return valeur
    else:
        return f(n-1) # ou autre modification

Méthodes à maîtriser

  • Tracer l'exécution : Dessiner la pile d'appels (stack) pour comprendre l'ordre des retours.
  • Vérifier la terminaison : S'assurer que chaque appel réduit la taille du problème vers le cas de base.
  • Conversion : Savoir passer d'une boucle while ou for à une structure récursive.

Exemples corrigés

Calcul de la factorielle :

def fact(n):
    if n == 0: return 1
    return n * fact(n-1)

Pour fact(3), on a : 3 * fact(2) -> 3 * (2 * fact(1)) -> 3 * (2 * (1 * fact(0))) = 6.

Erreurs fréquentes

  • Oublier le cas de base : provoque une erreur RecursionError (Stack Overflow).
  • Paramètre qui ne converge pas : si le paramètre ne se rapproche jamais du cas de base.
  • Confusion entre print et return : oublier de retourner la valeur dans l'appel récursif.

🌉 Jisr : les mots du chapitre FR ⇄ AR

Tu as appris les sciences en arabe ? Touche un mot pour voir sa traduction et une explication en darija.

La question que tu n'oses pas poser en classe ? Pose-la à UstadZéro jugement, même en darija, même à minuit. Il t'explique pas à pas et corrige ta démarche. Gratuit.

Défi flash : 4 questions

Sans compte

🎯 Récursivité

1/4

Quel est l'élément indispensable pour éviter une erreur de récursion infinie ?

❓ Questions fréquentes

Est-ce que la récursivité est toujours plus rapide qu'une boucle ?

Non, au contraire. En Python, la récursivité est souvent plus lente et consomme plus de mémoire à cause de la gestion de la pile d'appels (stack frames). Une boucle for ou while est généralement plus efficace en termes de performance. On utilise la récursivité pour la clarté du code ou quand le problème est naturellement récursif (ex: arbres).

💡 À retenir : La récursivité privilégie la lisibilité, la boucle privilégie la performance.

Chno hiya "RecursionError" li kat3tini Python?

C'est une erreur qui arrive quand tu dépasses la limite de profondeur de récursion autorisée par Python (généralement 1000 appels). Ça veut dire que ton programme est "bloqué" dans une boucle infinie d'appels récursifs parce que tu as oublié le cas de base ou que ta condition d'arrêt n'est jamais atteinte.

💡 À retenir : Vérifie toujours si ton cas de base est bien défini et accessible.

Kifach n7seb l'complexité dyal une fonction récursive?

Pour calculer la complexité, on utilise souvent une relation de récurrence :

  1. Identifie le nombre d'appels (ex: $T(n) = T(n-1) + 1$).
  2. Résous l'équation pour trouver la forme fermée.
  3. Pour la factorielle, c'est $O(n)$ car il y a $n$ appels. Pour Fibonacci récursif simple, c'est $O(2^n)$.

💡 À retenir : La complexité dépend du nombre d'appels et du travail effectué à chaque étape.

Est-ce qu'on peut remplacer n'importe quelle boucle par une fonction récursive ?

Oui, théoriquement, tout algorithme itératif peut être transformé en algorithme récursif. Cependant, ce n'est pas toujours recommandé car cela peut rendre le code plus complexe à lire et plus gourmand en mémoire.

💡 À retenir : La récursivité est un outil puissant, mais utilise-le seulement quand c'est nécessaire.

Wach l'appel récursif khasso ykon dima f lakher dyal l'fonction?

Non. Si l'appel est la toute dernière opération, on appelle ça la "récursion terminale" (tail recursion). Mais tu peux avoir des appels récursifs au milieu du code, avant ou après d'autres instructions.

💡 À retenir : L'emplacement de l'appel change l'ordre des calculs.

Comment tracer une fonction récursive sans se perdre ?

Utilise un schéma en arbre ou une pile :

  1. Écris l'appel initial en haut.
  2. Dessine des flèches vers les appels suivants.
  3. Quand tu atteins le cas de base, remonte les valeurs vers le haut.

💡 À retenir : La pile d'appels fonctionne en "dernier entré, premier sorti" (LIFO).

Est-ce que la récursivité est utile pour les listes ?

Oui, très utile pour parcourir des structures complexes ou des listes imbriquées. Tu peux traiter le premier élément (tête) et appeler la fonction sur le reste de la liste (queue).

💡 À retenir : La récursion sur liste est une base de la programmation fonctionnelle.

Pourquoi ma fonction récursive ne retourne rien ?

C'est souvent parce que tu as oublié le mot-clé return devant l'appel récursif. Si tu écris f(n-1) au lieu de return f(n-1), la valeur calculée est perdue.

💡 À retenir : Chaque étape de la récursion doit transmettre le résultat vers le haut.

Est-ce qu'on peut avoir deux appels récursifs dans la même fonction ?

Oui, c'est très courant, par exemple dans l'algorithme de Fibonacci : return fib(n-1) + fib(n-2). Cela crée un arbre d'appels.

💡 À retenir : Plusieurs appels augmentent souvent la complexité de façon exponentielle.

Est-ce que la récursivité est au programme du Bac ?

Oui, c'est une notion fondamentale en algorithmique pour les classes préparatoires et le programme d'informatique. C'est un sujet classique des épreuves.

💡 À retenir : Maîtrise bien la structure cas de base / cas récursif.

Kifach n3ref wach l'algorithme dyali ghadi ykoun récursif ou itératif ?

Si le problème se définit par lui-même (ex: factorielle, PGCD, parcours d'arbre), la récursivité est naturelle. Si tu dois juste répéter une action simple sur une liste, une boucle est souvent préférable.

💡 À retenir : Choisis la récursivité pour la clarté mathématique.

Est-ce que la mémoire est un problème avec la récursivité ?

Oui, chaque appel récursif occupe une place dans la pile d'appels. Si la profondeur est trop grande, tu auras une erreur de mémoire.

💡 À retenir : Attention à la profondeur de récursion pour les grandes données.

✍️ Exercices type examen national

Exercice 1

Écrire une fonction récursive somme_liste(L) qui calcule la somme des éléments d'une liste L de nombres.

Voir la correction détaillée : inscription gratuite

Exercice 2

Soit la fonction suivante :

def mystere(n):
    if n < 10:
        return n
    else:
        return (n % 10) + mystere(n // 10)

Donner le résultat de mystere(123).

Voir la correction détaillée : inscription gratuite

Exercice 3

Écrire une fonction récursive puissance(a, n) qui calcule $a^n$ pour $n \in \mathbb{N}$.

Voir la correction détaillée : inscription gratuite

Un prof de Informatique pour aller plus loin

Les cours du soir avec des profs vérifiés arrivent : inscris-toi pour être prévenu(e) en premier.

Être prévenu(e) gratuitement

Autres chapitres de Informatique