Self-assessment quiz
Présentation & objectifs
Les quiz suivants sont là pour vous aider à vérifier que vous avez compris les articles que vous deviez étudier.
À la fin d’un quiz, des explications vous seront données sur vos réponses.
Si certaines sont fausses, vous aurez la possibilité de cliquer sur la question ratée pour réessayer.
Ces quiz sont fournis pour l’auto-évaluation et ne seront ni notés ni stockés.
N’hésitez pas à poser vos questions sur le serveur Discord pour toute précision ou explication !
Quiz
Algorithmes récursifs
# Quelle phrase décrit le mieux un cas de base dans une fonction récursive ?
1. [x] La partie de la fonction où la récursion s’arrête et un résultat est retourné
> ✅ Le cas de base est essentiel pour assurer que la récursion se termine, en fournissant un résultat au lieu d’appeler la fonction à nouveau.
1. [ ] La partie de la fonction qui s’appelle elle-même
> ❌ Cela décrit la récursion elle-même, pas le cas de base qui est crucial pour arrêter la récursion.
1. [ ] La profondeur maximale que la récursion peut atteindre
> ❌ La profondeur de récursion est un concept différent, généralement lié aux limites système, pas au cas de base.
1. [ ] L’appel initial à la fonction récursive
> ❌ L’appel initial est simplement la première invocation de la fonction récursive, pas le cas de base.
# Étant donné la fonction récursive suivante, quel sera le résultat de `foo(3)` ?
```python
def foo (n: int) -> int:
if n == 0:
return 1
else:
return n - 1 * foo(n)
```
1. [ ] 6
> ❌ Ce n’est pas la sortie correcte à cause de problèmes dans la logique récursive.
1. [x] L’entrée ne devient pas "plus petite", ce qui conduit à une récursion infinie
> ✅ L’entrée ne diminue pas, ce qui fait que la fonction s’appelle indéfiniment, menant à une récursion infinie.
1. [ ] Le cas de base est incorrect, ce qui conduit à une récursion infinie
> ❌ Le cas de base est valide (`n == 0`), mais le problème vient de l’étape récursive qui ne réduit pas correctement `n`.
1. [ ] L’appel récursif n’est pas toujours connecté au cas de base : cela peut conduire à une récursion infinie
> ❌ L’appel récursif est connecté au cas de base, mais le problème vient de la manière dont `n` est manipulé.
# Étant donné la fonction récursive suivante, quel sera le résultat de `bar(4)` ?
```python
def bar (n: int) -> int:
if n == 0:
return 1
else:
return n + bar(n - 2)
```
1. [x] 7
> ✅ Les appels récursifs seraient : `4 + bar(2)` qui retourne `4 + (2 + bar(0)) = 4 + 2 + 1 = 7`.
1. [ ] L’entrée ne devient pas "plus petite", ce qui conduit à une récursion infinie
> ❌ L’entrée diminue de 2 à chaque fois, ce qui empêche la récursion infinie.
1. [ ] Le cas de base est incorrect, ce qui conduit à une récursion infinie
> ❌ Le cas de base est correct (`n == 0`), ce qui permet à la récursion de s’arrêter.
1. [ ] L’appel récursif n’est pas toujours connecté au cas de base : cela peut conduire à une récursion infinie
> ❌ L’appel récursif réduit correctement l’entrée et est connecté au cas de base.
# Étant donné la fonction récursive suivante, quel sera le résultat de `bar(3)` ?
```python
def bar (n: int) -> int:
if n == 0:
return 1
else:
return n + bar(n - 2)
```
1. [ ] 4
> ❌ Ce n’est pas la sortie correcte selon la progression de la fonction récursive.
1. [ ] L’entrée ne devient pas "plus petite", ce qui conduit à une récursion infinie
> ❌ L’entrée diminue de 2, donc elle rétrécit.
1. [ ] Le cas de base est incorrect, ce qui conduit à une récursion infinie
> ❌ Le cas de base est correct et arrêterait la récursion.
1. [x] L’appel récursif n’est pas toujours connecté au cas de base : cela peut conduire à une récursion infinie
> ✅ En commençant par `bar(3)`, il appelle `bar(1)`, puis `bar(-1)` et ainsi de suite, mais il n’y a pas de cas de base pour gérer `n < 0`, ce qui peut conduire à une récursion infinie.