Thông tin

Tác giả Vincent Branders, Pierre Dupont
Hạn chót 01/04/2026 14:00:00
Giới hạn nộp bài Không có giới hạn

Đăng nhập

[TP07] Somme cumulée d'une liste - Itératif

Vous avez appris précédemment comment utiliser la récursion sur des entiers et des tableaux.

Dans cette séance-ci, nous travaillerons la récursion sur les listes. Ce type abstrait de données présente un exemple de récursion structurelle : la liste est définie soit comme la liste vide, soit comme un élément suivi d'une liste.

Une telle implémentation vous est fournie par la classe List.py.

La figure suivante représente graphiquement un objet de type List qui contient les entiers de 1 à 5.

\begin{equation*} \boxed{1}\rightarrow\boxed{\boxed{2}\rightarrow\boxed{\boxed{3}\rightarrow\boxed{\boxed{4}\rightarrow\boxed{\boxed{5}\rightarrow\!\bullet}}}} \end{equation*}

Câu hỏi 1: Somme cumulée d'une liste (itératif)

Vous êtes chargés d'implémenter la fonction suivante en Python. Pour préparer votre code, vous pouvez télécharger le fichier cum_sum.py qui contient la signature de la fonction et quelques exemples de tests. Vous pouvez également télécharger le fichier List.py qui contient une implémentation de liste.

Note: Lorsqu'il vous est demandé d'implémenter une fonction, vous êtes invités à ne remplir que le corps de la fonction à implémenter.

Attention: Votre implémentation ne peut accéder à la liste passée en paramètre que via les méthodes de la classe List. En effet, dans un bon design orienté-objet, il n'est pas permis d'accéder aux variables d'instance, ici first_elem et tail_list en dehors de la classe elle-même. Ce sont donc exclusivement le constructeur ou les autres méthodes de cette classe qui peuvent assigner, modifier ou renvoyer les valeurs de ces variables. Rien ne vous empêche, par contre, de définir une seconde liste qui pourrait servir à mémoriser un résultat intermédiaire du calcul, pour autant que vous respectiez le même principe pour cette seconde liste: accès ou modification de la liste uniquement via les méthodes déjà définies de la classe List.

Vous n'êtes pas non plus sensé modifier ou étendre la classe List. Ce n'est pas nécessaire pour résoudre l'exercice.

def cum_sum(l: List):
    """
    Calcule la liste des sommes cumulées des éléments de `l`
    par itération
    pre: -
    post: retourne une liste dont le `i`^ième élément est la somme
        des `i` premiers éléments de `l`
    """
Câu hỏi 2: Complexité temporelle

Quelle est la complexité temporelle de l’algorithme ? Choisissez la borne la plus simple et la plus stricte possible.

On suppose que vous n'effectuez pas d'opérations inutiles.

Câu hỏi 3: Problème de récursion

Bien que votre implémentation soit "aussi itérative que possible", des appels récursifs pourraient être effectués. Sélectionnez, parmi les propositions suivantes, celles qui induisent des appels récursifs.