Aller au contenu

Devoir sur la récursivité 2025-2026

L'usage de la calculatrice n'est pas autorisé et le barème est donné à titre indicatif

Durée : 55 min

Exercice 1 (2 points)

Définir une fonction récursive longueur(s) qui détermine la longueur d'une chaîne de caractères s.

def longueur(s):
    # cas particulier
    if s == ... :
        return ...
    # appel récursif
    else :
        return ...
Corrigé
def longueur(s):
    # cas particulier : chaîne vide
    if s == "":
        return 0
    # appel récursif : on retire le premier caractère et on ajoute 1
    else:
        return 1 + longueur(s[1:])

Exercice 2 (3 points)

On définit la fonction python ci-dessous dans laquelle L est une liste.

Rappel: si L = [7,8,9,10] alors L[0:3] vaut [7,8,9]

def r(deb, fin, L):
    if deb >= fin:
        print("fini")
    else:
        print(L[deb:fin])
        return  r(deb+1, fin, L)

Décrire sur papier les étapes lors de l'appel ci-dessous.

L = [2, 3, 4, 7, 11, 15, 17]
r(1,4, L)
Corrigé
[3, 4, 7]
[4, 7]
[7]
fini

Exercice 3 (2 points)

Faire le dessin de la figure obtenue lors de l'exécution de la fonction suivante:

def figure(n):
    if n>0:
        for i in range(3):
            forward(n*10)
            left(120)
    figure(n-1)
Corrigé

Tortue Triangle

Exercice 4 (3 points)

Écrire une fonction nommée somme_listes_imbriquees, récursive, qui additionne tous les entiers des listes.

Exemple de listes imbriquées :

L1 = [1, [2, [3, 4], 5], 6, [7, 8]] L2 = [1, [2, [3, [4, [5]]]]]

Corrigé
def somme_listes_imbriquees(L):
    if L==[]:
        return 0
    else:
        if type(L[0])==List:
            return somme_listes_imbriquees(L[0])+somme_listes_imbriquees(L[1:])
        else:
            return L[0]+ somme_listes_imbriquees(L[1:])

Exercice 5 (3 points)

Écrire un programme récursif qui permet de représenter la figure suivante:

Addition

Corrigé
from turtle import *

def plus(t, n):
    if n>0:
        for i in range(4):
            forward(t*2/3)
            plus(t/2,n-1)
            backward(t*2/3)
            left(90)

speed('fastest')

plus(100, 3)