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"