Contraintes
Nous allons manipuler des listes python (équivalent des tableaux) de façon récursive. Les fonctions de base suivantes permettront de manipuler les listes :
def cons(element, liste):
return [element] + liste
def tete(liste):
return liste[0]
def queue(liste):
return liste[1:]
def detruit(liste):
return liste[0], liste[1:]Les seules choses que nous aurons le droit de faire sont :
# Créer une liste vide
l = []
# Construire une liste à partir
# d'une tête (un élément)
# et d'une queue (une liste)
t = 17
q = []
nouvelle = cons(t, q)
l = cons(16, nouvelle)
# Accéder au premier élément (tête)
print(tete(l))
# Accéder à la queue de la liste (liste privée de son premier élément)
print(queue(l))
# Couper une liste en sa tête et sa queue
t, q = detruit(l)
# Tester si la liste est vide
if l == []:
print("Liste vide")
else:
print("Liste pas vide")Exercices
taille ou longueur d’une liste
def longueur(l): if l == []: return 0 else: return 1 + longueur(queue(l))estDansteste si un élément donné appartient à la liste.concatenemet deux listes bout à bout.renverserenvoie la liste à l’envers.Calculer la complexité des fonctions
concateneetrenverse.maximumrenvoie le plus grand élément d’une liste d’entiers.minimumrenvoie le plus grand élément d’une liste d’entiers.repeat(n, m)renvoie la liste composée denfois l’élémentm.>>> repeat(5, "ah") ["ah", "ah", "ah", "ah", "ah"]cycle(n, l)renvoie la liste composée denfois la listel.>>> cycle(4, ["a","b"]) ["a", "b", "a", "b", "a", "b", "a", "b"]pairs(n)renvoie la liste des n premiers nombres pairs.>>> lp = pairs(10) >>> lp [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]take(n, l)renvoie la liste desnpremiers éléments del.>>> take(4, lp) [2, 4, 6, 8]drop(n, l)renvoie la liste des éléments delprivée desnpremiers.>>> drop(5, lp) [12, 14, 16, 18, 20]lastrenvoie le dernier élément d’une liste.>>> last(lp) 20initrenvoie la liste privée de son dernier élément.>>> init(lp) [2, 4, 6, 8, 10, 12, 14, 16, 18]