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

Algorithmique · Écoles d'ingénieurs — ENSIAS

Récursivité et méthodes de conception d'algorithmes

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 technique où une fonction s'appelle elle-même pour résoudre une instance plus petite d'un problème.

  • Structure type :
    1. Cas de base : Condition d'arrêt pour éviter la boucle infinie.
    2. Cas récursif : Réduction du problème vers le cas de base.
  • Principe "Diviser pour régner" : Diviser le problème en sous-problèmes, résoudre les sous-problèmes, et combiner les résultats.

Méthodes à maîtriser

  • Analyse de la pile : Savoir tracer les appels successifs.
  • Récursion terminale : Optimiser l'espace mémoire en évitant de garder des variables en attente.
  • Conversion : Transformer un algorithme itératif en récursif et vice-versa.

Exemples corrigés

  • Factorielle : fact(n) = n * fact(n-1) avec fact(0) = 1.
  • Fibonacci : fib(n) = fib(n-1) + fib(n-2) avec fib(0)=0, fib(1)=1.

Erreurs fréquentes

  • Oublier le cas de base (Stack Overflow).
  • Mauvaise réduction du problème (boucle infinie).
  • Confusion entre récursivité et itération (utilisation inutile de la pile).

🌉 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é et méthodes de conception d'algorithmes

1/4

Quelle est la condition indispensable pour une fonction récursive ?

❓ Questions fréquentes

Pourquoi on utilise "Diviser pour régner" ?

Pour réduire la complexité temporelle (ex: passer de $O(n)$ à $O(\log n)$).

💡 À retenir : C'est la base des algorithmes de tri efficaces (Merge Sort).

Est-ce que la récursivité consomme plus de RAM ?

Oui, car chaque appel crée un nouveau "cadre de pile" (stack frame) qui stocke les variables locales et l'adresse de retour.

💡 À retenir : La récursion profonde peut saturer la mémoire.

Kifach n3ref wach l'algorithme diali récursif terminal ?

Si l'appel récursif est la toute dernière opération effectuée par la fonction, sans calcul supplémentaire après.

💡 À retenir : La récursion terminale permet au compilateur d'optimiser l'espace.

Est-ce qu'une fonction récursive est toujours plus lente qu'une itérative ?

Pas nécessairement. Si elle est bien conçue (notamment avec la récursion terminale ou la mémoïsation), sa performance est comparable à l'itérative. Cependant, l'appel de fonction a un coût système (gestion de la pile).

💡 À retenir : La récursivité est souvent plus lisible, mais l'itération est plus économe en mémoire.

Kifach n7seb l'complexité dial chi fonction récursive ?
  1. Écris l'équation de récurrence : $T(n) = aT(n/b) + f(n)$.
  2. Utilise le théorème maître (Master Theorem) pour trouver la classe de complexité.

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

Chno hiya l'erreur "Stack Overflow" ?

C'est quand la pile d'exécution est pleine. Ça arrive souvent quand le cas de base n'est jamais atteint ou quand la profondeur de récursion est trop grande.

💡 À retenir : Vérifie toujours ta condition d'arrêt avant de lancer le code.

Est-ce que le Backtracking est une forme de récursivité ?

Oui, le backtracking est une technique récursive qui explore systématiquement les solutions possibles et revient en arrière si une branche ne mène pas à une solution.

💡 À retenir : Le backtracking est une exploration d'arbre de recherche.

Wach momkin nkhdem b récursivité f ga3 les problèmes ?

Oui, théoriquement tout algorithme itératif peut être écrit de manière récursive, mais ce n'est pas toujours efficace ou recommandé.

💡 À retenir : Choisis la récursivité pour les problèmes naturellement récursifs (arbres, graphes).

Comment transformer une récursion en itération ?

En utilisant une structure de données explicite (une pile) pour simuler la pile d'appels système.

💡 À retenir : La pile remplace l'appel récursif.

Chno l'far9 bin récursivité directe et indirecte ?

Directe : A appelle A. Indirecte : A appelle B et B appelle A.

💡 À retenir : La logique reste la même, seule la structure change.

Est-ce que le cas de base doit toujours être 0 ou 1 ?

Non, le cas de base est la condition où le problème est trivialement résolu. Ça peut être une liste vide, un arbre avec un seul nœud, etc.

💡 À retenir : Le cas de base dépend de la structure de données.

Est-ce que la mémoïsation est obligatoire ?

Elle n'est pas obligatoire mais fortement recommandée pour éviter de recalculer les mêmes sous-problèmes (comme dans Fibonacci).

💡 À retenir : Mémoïsation = gain de temps énorme.

✍️ Exercices type examen national

Exercice 1

Écrire une fonction récursive puissance(a, n) qui calcule $a^n$ pour $n \geq 0$.

Voir la correction détaillée : inscription gratuite

Exercice 2

Soit la suite définie par $U_0 = 1, U_1 = 1$ et $U_n = U_{n-1} + U_{n-2}$. Écrire l'algorithme récursif.

Voir la correction détaillée : inscription gratuite

Exercice 3

Expliquer le principe du tri fusion (Merge Sort) en utilisant la méthode "Diviser pour régner".

Voir la correction détaillée : inscription gratuite

Un prof de Algorithmique 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 Algorithmique