CODE PUZZLE
SUJET
Lien sujet + copie à fournir aux élèves pour un entraînement en autonomie
www.codepuzzle.io/K31L0X
Fonctions récursives
Pour chaque fonction, écrire la documentation (“docstrings”) et un jeu d’au moins trois tests. \ **Fonction 1** Écrire une fonction récursive `somme_n(n)` qui renvoie la somme des entiers de `1` à `n`. \ **Fonction 2** Écrire une fonction récursive `longueur(tab)` qui renvoie la longueur de la liste `tab` sans utiliser `len()`. La fonction doit fonctionner même pour une liste vide. Rappel : soit `L` une liste, `L[1:]` sélectionne tous les éléments sauf le premier. \ **Fonction 3** Écrire une fonction récursive `somme_chiffres(n)` qui prend en paramètre un entier `n ≥ 0` et renvoie la somme de ses chiffres. Si `n < 10`, la fonction renvoie `n`. Exemple : `somme_chiffres(2037)` doit renvoyer `12`. Aide : pour séparer le dernier chiffre des autres chiffres, utiliser `n % 10` et `n // 10`. \ **Fonction 4** Écrire une fonction récursive `repeter(s, n)` qui renvoie la chaîne `s` répétée `n` fois, sans utiliser l’opérateur `*`. Pour `n = 0`, la fonction renvoie une chaîne vide `""`.
PORTÉE D'EXÉCUTION DU CODE : exécution par cellule (chaque cellule s'exécute indépendamment des autres)
PROGRAMME 1
CODE ÉLÈVE
CODE ENSEIGNANT
SOLUTION POSSIBLE
def somme_n(n: int) -> int: if n == 0: return 0 return n + somme_n(n - 1) # Tests assert somme_n(0) == 0 assert somme_n(1) == 1 assert somme_n(5) == 15
PROGRAMME 2
CODE ÉLÈVE
CODE ENSEIGNANT
# Tests assert longueur([]) == 0 assert longueur([5]) == 1 assert longueur([1, 2, 3, 4]) == 4
SOLUTION POSSIBLE
def longueur(tab): if tab == []: return 0 return 1 + longueur(tab[1:]) # Tests assert longueur([]) == 0 assert longueur([5]) == 1 assert longueur([1, 2, 3, 4]) == 4
PROGRAMME 3
CODE ÉLÈVE
CODE ENSEIGNANT
# Tests assert somme_chiffres(2037) == 12 assert somme_chiffres(0) == 0 assert somme_chiffres(999) == 27
SOLUTION POSSIBLE
def somme_chiffres(n): if n < 10: return n return n % 10 + somme_chiffres(n // 10) # Tests assert somme_chiffres(2037) == 12 assert somme_chiffres(0) == 0 assert somme_chiffres(999) == 27
PROGRAMME 4
CODE ÉLÈVE
CODE ENSEIGNANT
# Tests assert repeter("ab", 0) == "" assert repeter("ab", 3) == "ababab" assert repeter("x", 1) == "x"
SOLUTION POSSIBLE
def repeter(s, n): if n == 0: return "" return s + repeter(s, n - 1) # Tests assert repeter("ab", 0) == "" assert repeter("ab", 3) == "ababab" assert repeter("x", 1) == "x"