Des exercices
Ce quiz explore le fonctionnement des algorithmes récursifs et leur exécution dans la pile d’appels. Vous étudierez les cas de base, la progression vers ces cas, l’ordre d’exécution, les cadres d’activation, la récursivité terminale et mutuelle, ainsi que les risques de débordement de pile. Des exercices de traçage portent également sur la factorielle, Fibonacci, les palindromes, la recherche dichotomique et le parcours d’arbres.
Répondez aux questions ci-dessous et consultez l'explication de chaque réponse.
0/19 répondues
Audio automatique activé : les prochaines questions seront lues quand vous cliquerez sur Continuer.
Le cas de base fournit directement un résultat et met fin à la descente récursive. Sans cas de base accessible, les appels peuvent se poursuivre jusqu’au débordement de la pile.
Le premier appel, f(3), se trouve au bas de la pile. Chaque nouvel appel est empilé au-dessus du précédent, jusqu’à f(0), qui occupe alors le sommet.
La factorielle vérifie 0! = 1. Pour n supérieur à 0, elle est obtenue en multipliant n par la factorielle de n − 1.
Il ne suffit pas de déclarer un cas de base : chaque appel doit aussi progresser vers lui. Une évolution dans la mauvaise direction entraîne une récursion sans fin.
L’expansion donne 4 + 3 + 2 + 1 + somme(0). Comme somme(0) vaut 0, le résultat est 10.
L’affichage précède l’appel récursif. Les valeurs sont donc affichées pendant la descente : 3, puis 2, puis 1. Le cas n = 0 retourne sans affichage.
L’affichage attend le retour de l’appel suivant. Il se produit donc pendant la remontée de la pile : d’abord 1, puis 2, puis 3.
Un cadre d’activation conserve le contexte propre à un appel : paramètres, variables locales et données permettant de reprendre l’exécution après le retour.
Dans une récursion terminale, l’appel récursif constitue la dernière opération. Certains langages ou compilateurs peuvent alors réutiliser le cadre courant, mais cette optimisation n’est pas universelle.
L’algorithme naïf recalcule plusieurs fois les mêmes valeurs et génère un arbre d’appels fortement ramifié. Son temps d’exécution croît exponentiellement avec n.
L’arbre contient fib(4), les appels issus de fib(3) et ceux issus de fib(2). En comptant chaque nœud, y compris les appels répétés, on obtient 9 appels.
Avant le premier retour, la pile contient les cadres de fact(5), fact(4), fact(3), fact(2), fact(1) et fact(0), soit 6 cadres.
Chaque élément est traité une seule fois et chaque appel effectue un travail constant hors appel récursif. Le temps total est donc linéaire : O(n).
La suite des tailles est 16 → 8 → 4 → 2 → 1. Elle comporte quatre passages d’une taille à sa moitié, ce qui illustre une profondeur logarithmique.
Dans une récursivité mutuelle, une fonction A appelle une fonction B qui, directement ou par une chaîne d’appels, rappelle A. Les fonctions forment ainsi un cycle récursif.
Après avoir validé les paires extérieures, une zone restante vide ou réduite à un caractère est nécessairement palindromique. La récursion peut alors s’arrêter avec succès.
Une boucle n’ajoute pas un nouveau cadre à chaque étape. La transformation itérative permet donc généralement de conserver une utilisation constante de la pile d’appels.
Le parcours préfixe traite d’abord la racine, puis visite récursivement le sous-arbre gauche et enfin le sous-arbre droit.
La mémoïsation stocke les valeurs déjà calculées. Chaque état fib(k) n’est réellement calculé qu’une fois, ce qui transforme le coût exponentiel en coût linéaire, au prix d’une mémoire O(n).
Des milliers de cours en ligne en vidéo, livres électroniques et livres audio.
Pour tester vos connaissances lors de cours en ligne
Généré directement à partir de la galerie de photos de votre téléphone portable et envoyé à votre adresse e-mail
Téléchargez notre application via QR Code ou les liens ci-dessous :.
+ 10 millions
d'étudiants
Certificat gratuit et
valide avec QR Code
60 mille exercices
gratuits
Note de 4,8/5 dans les
magasins d'applications
Cours vidéo et livres
audio gratuits