QCM : Récursivité et pile d’exécution (14 questions)

Questions et réponses du QCM

1. Que se passe-t-il lorsqu’une fonction appelle une autre fonction avant d’avoir terminé son propre travail ?

La fonction appelante s’achève, puis est relancée depuis le début après l’appel.
La fonction appelante se met en pause, puis reprend lorsque la fonction appelée se termine.
La fonction appelée suspend son exécution et rend immédiatement la main à l’appelante.
Les deux fonctions poursuivent simultanément leur exécution jusqu’à leur achèvement.

La fonction appelante se met en pause, puis reprend lorsque la fonction appelée se termine.

Explication

La fonction appelante exécute les instructions précédant l’appel, se met en pause pendant l’exécution de la fonction appelée, puis reprend après sa fin. L’appel ne provoque pas la relance de la fonction appelante depuis le début.

2. Dans une pile d’exécution contenant plusieurs fonctions, quelle fonction est en cours d’exécution ?

Celle qui se trouve à la base de la pile, tandis que celles au-dessus sont en pause.
Celle qui se trouve au sommet de la pile, tandis que celles en dessous sont en pause.
Celle qui a commencé la première, même si d’autres fonctions l’ont appelée depuis.
Celle qui contient le plus grand nombre d’instructions encore à exécuter.

Celle qui se trouve au sommet de la pile, tandis que celles en dessous sont en pause.

Explication

La fonction située au sommet de la pile est celle qui s’exécute, alors que les fonctions en dessous attendent en pause. La fonction à la base peut être l’appelante initiale, mais elle n’est pas pour autant celle qui est en cours.

3. Une fonction appelante possède une variable locale appelée « compteur » et appelle une autre fonction qui définit aussi une variable locale de ce nom. Que devient la valeur du « compteur » de l’appelante ?

Elle est conservée pendant l’exécution de la fonction appelée.
Elle est transférée à la fonction appelée et n’appartient plus à l’appelante.
Elle est remplacée par la valeur du « compteur » de la fonction appelée.
Elle est effacée à l’appel, puis recréée à la reprise de l’appelante.

Elle est conservée pendant l’exécution de la fonction appelée.

Explication

La valeur de la variable locale de l’appelante est conservée pendant l’exécution de l’autre fonction, même si celle-ci utilise une variable locale du même nom. Le nom identique ne remplace donc pas la variable de l’appelante par celle de la fonction appelée.

4. Quelle information la pile d’exécution conserve-t-elle pour permettre à une fonction en pause de reprendre au bon endroit ?

La copie complète du code source de la fonction appelée ensuite.
La valeur finale de chaque variable locale de toutes les fonctions actives.
L’adresse mémoire de la prochaine instruction machine à exécuter.
Le nom de la fonction qui sera appelée après le retour à l’appelante.

L’adresse mémoire de la prochaine instruction machine à exécuter.

Explication

La pile conserve l’adresse mémoire de la prochaine instruction machine à exécuter lorsque la fonction en pause reprend. Elle n’a pas besoin de contenir une copie du code source pour indiquer ce point de reprise.

5. Qu’est-ce qui caractérise une fonction récursive ?

Elle appelle plusieurs fonctions différentes avant de se terminer.
Elle peut s’appeler elle-même au cours de son exécution.
Elle reprend son exécution après avoir été mise en pause par une autre fonction.
Elle conserve ses variables locales après la fin de son exécution.

Elle peut s’appeler elle-même au cours de son exécution.

Explication

Une fonction récursive est définie par sa capacité à s’appeler elle-même pendant son exécution. Appeler plusieurs fonctions différentes ne suffit pas à rendre une fonction récursive si elle ne s’appelle pas elle-même.

6. Dans quels domaines la récursivité se retrouve-t-elle notamment ?

Dans les bases de données relationnelles, les réseaux électriques et le théâtre classique.
Dans les équations linéaires, les cartes géographiques et les récits chronologiques.
Dans les suites récurrentes, les géométries fractales et la mise en abyme littéraire.
Dans les opérations arithmétiques, les tableaux périodiques et la poésie lyrique.

Dans les suites récurrentes, les géométries fractales et la mise en abyme littéraire.

Explication

La récursivité apparaît notamment dans les suites récurrentes, les géométries fractales et la mise en abyme en littérature. Les tableaux périodiques, par exemple, ne constituent pas l’un des domaines cités ici.

7. Quelle relation définit la factorielle de nn pour n>1n>1 ?

n!=n×(n−1)!n! = n \times (n-1)!
n!=(n−1)×(n−2)!n! = (n-1) \times (n-2)!
n!=n×(n+1)!n! = n \times (n+1)!
n!=n+(n−1)!n! = n + (n-1)!

$$n! = n \times (n-1)!$$

Explication

La factorielle de nn se calcule en multipliant nn par la factorielle de n−1n-1. La relation avec une addition confond la règle multiplicative avec une autre forme de récurrence.

8. Lors du calcul récursif de 5!5!, quelle valeur est renvoyée lorsque l’appel atteint le cas d’arrêt ?

00 lorsque l’appel porte sur n=1n=1
11 lorsque l’appel porte sur n=0n=0
nn lorsque l’appel porte sur n=1n=1
11 lorsque l’appel porte sur n=1n=1

$$1$$ lorsque l’appel porte sur $$n=1$$

Explication

Le calcul s’arrête au cas n=1n=1, qui renvoie la valeur 11; les appels précédents multiplient ensuite cette valeur par les entiers concernés. Un arrêt à n=0n=0 ne correspond pas au cas d’arrêt défini ici.

9. Une suite est définie par u0=12u_0=\frac{1}{2} et un+1=un(1−un)u_{n+1}=u_n(1-u_n). Quelle expression permet de calculer son terme suivant à partir de unu_n ?

un(1−un)u_n(1-u_n)
un(1−un+1)u_n(1-u_{n+1})
un(1+un)u_n(1+u_n)
un+1−unu_n+1-u_n

$$u_n(1-u_n)$$

Explication

La règle de récurrence multiplie le terme courant par un moins ce même terme. Remplacer la soustraction par une addition modifie la relation qui définit la suite.

10. Dans un calcul récursif de Fibonacci, quelle opération est effectuée pour déterminer le terme de rang nn lorsque n>1n>1 ?

Soustraire le terme de rang n−2n-2 de celui de rang n−1n-1
Additionner les termes de rang nn et n−1n-1
Multiplier les termes de rang n−1n-1 et n−2n-2
Additionner les termes de rang n−1n-1 et n−2n-2

Additionner les termes de rang $$n-1$$ et $$n-2$$

Explication

Pour n>1n>1, le calcul récursif renvoie la somme des termes de rang n−1n-1 et n−2n-2. La multiplication des deux termes voisins est une opération différente de la règle de Fibonacci.

11. Quel schéma caractérise une fonction récursive ?

Une suite d’instructions répétées sans cas d’arrêt ni appel récursif
Deux cas qui font chacun appel à la fonction récursive
Un cas d’arrêt sans appel récursif et un autre cas pouvant faire intervenir la fonction
Un cas d’arrêt qui rappelle la fonction et un autre cas sans branche conditionnelle

Un cas d’arrêt sans appel récursif et un autre cas pouvant faire intervenir la fonction

Explication

Une fonction récursive prévoit un cas d’arrêt sans appel récursif, ainsi qu’un autre cas où une instruction peut rappeler la fonction. Deux cas comportant chacun un appel récursif ne décrivent pas ce schéma général.

12. Quel problème pratique peut découler de la gestion de la pile dans une fonction récursive ?

Elle peut provoquer un débordement et ralentir l’exécution
Elle empêche la fonction de traiter des données structurées
Elle supprime les appels de fonction pendant le calcul
Elle garantit une exécution rapide et facile à maîtriser

Elle peut provoquer un débordement et ralentir l’exécution

Explication

La gestion de la pile peut entraîner un débordement, ralentir fortement l’exécution et compliquer la maîtrise de l’efficacité. Elle ne garantit donc pas, contrairement à un distracteur, une exécution rapide.

13. Quelle distinction oppose le paradigme fonctionnel au paradigme impératif ?

Le paradigme fonctionnel évite les fonctions, tandis que l’impératif les place au premier plan
Le paradigme fonctionnel privilégie les affectations, tandis que l’impératif privilégie les fonctions
Le paradigme fonctionnel privilégie les fonctions, tandis que l’impératif a été utilisé auparavant
Le paradigme fonctionnel repose sur les arbres, tandis que l’impératif repose sur les suites

Le paradigme fonctionnel privilégie les fonctions, tandis que l’impératif a été utilisé auparavant

Explication

Le paradigme fonctionnel met l’accent sur l’utilisation des fonctions, contrairement au paradigme impératif abordé auparavant. Faire des affectations la caractéristique privilégiée du paradigme fonctionnel inverse cette distinction.

14. Quelle propriété distingue un langage purement fonctionnel concernant l’affectation ?

Il ne permet pas l’affectation, contrairement au paradigme impératif
Il remplace les fonctions par des affectations, contrairement au paradigme impératif
Il permet l’affectation uniquement dans les fonctions récursives, contrairement au paradigme impératif
Il exige une affectation pour chaque appel de fonction, contrairement au paradigme impératif

Il ne permet pas l’affectation, contrairement au paradigme impératif

Explication

Dans un langage purement fonctionnel, tout est fonction et aucune affectation n’est possible. L’idée que l’affectation serait exigée à chaque appel reprend plutôt une caractéristique associée au paradigme impératif.

Révisez avec les flashcards

Mémorisez les réponses avec 37 flashcards sur Récursivité et pile d’exécution.

Quand une fonction appelée termine-t-elle, par rapport à la fonction appelante ?

La fonction appelante reprend à la fin de la fonction appelée.

Que fait une fonction appelante pendant l’exécution de la fonction appelée ?

Elle se met en pause.

Quelle fonction est en cours d’exécution au sommet de la pile d’exécution ?

La fonction située au sommet de la pile.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Récursivité et pile d’exécution.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM