On considère la suite de nombres \((U_n) \) défini par :

$$ U_0 = 1, \forall n \in \mathbb{N},\quad u_{n+1} = 3u_n + 5 $$

a) Proposer une fonction qui admet comme argument un entier naturel \(n\) et retourne \(U_n\).
Attention, on n’utilisera pas de liste dans cette fonction.

b) Proposer une nouvelle fonction qui admet comme argument un entier naturel \(n\) et retourne la liste \( L = [u_0, u_1, u_2, \dots, u_n] \)

Comment calculer un terme de la suite ?
Calculons ensemble les premiers termes de la suite :

  • \(u_0=1\)

  • \(u_1= 3 \times U_0 + 5 = 3 \times 1 + 5 = 8\)

  • \(u_2= 3 \times U_1 + 5 = 3 \times 8 + 5 = 29\)

  • \(u_3= 3 \times U_2 + 5 = 3 \times 29 + 5 = 92\)

Ainsi, les premiers termes de la suite sont \(u_0=1, u_1=8, u_2=29, u_3=92\).

Besoin d’aide ?

a) Définir une variable \(u\) pour symboliser la valeur du terme initial puis multiplier \(u\) par un entier à chaque étape de la boucle \(for\).

b) Définir une liste. Ajouter un élément dans la liste à chaque étape de la boucle ## for ##.

Correction détaillée

a) On commence par initialiser une variable ##u## à 1 pour obtenir ##U_0 = 1##. À chaque étape de la boucle ##for##, on multiplie ##u## par ##3## puis on ajoute ##5## ce qui nous donne ainsi le terme suivant de la suite. On pensera à vérifier que ##n## est bien positif ou nul pour éviter tout dysfonctionnement.

Python
def suite_A(n):
    """
    Calcule le n-ième terme de la suite (uₙ) définie par :
        u₀ = 1
        uₙ₊₁ = 3uₙ + 5

    Paramètre :
        n (int) : Indice du terme à calculer (doit être ≥ 0)

    Retour :
        int : Valeur de uₙ
    """
    if n < 0:
        raise ValueError("n doit être un entier positif ou nul")

    u = 1
    for _ in range(n):
        u = 3 * u + 5
    return u

# ✅ Tests automatisés
assert suite_A(0) == 1, "Test échoué pour n = 0"
assert suite_A(1) == 8, "Test échoué pour n = 1"
assert suite_A(2) == 29, "Test échoué pour n = 2"
assert suite_A(3) == 92, "Test échoué pour n = 3"

print("✅ Tous les tests ont réussi !")

On n'utilise pas de liste pour stocker toutes les valeurs car on souhaite obtenir uniquement ##U_n## et non tous les termes de la suite. On évite ainsi d'encombrer la mémoire de l'ordinateur.

b) Cette fois, nous allons utiliser une Liste pour stocker l'intégralité des termes de la suite

Python
def suite_B(n):
    """
    Génère la liste des termes de la suite (uₙ) définie par :
    u₀ = 1
    uₙ₊₁ = 3uₙ + 5

    Paramètre :
        n (int) : Indice du dernier terme à calculer

    Retour :
        list : Liste des termes [u₀, u₁, ..., uₙ]
    """
    if n < 0:
        raise ValueError("n doit être un entier positif ou nul")

    L = [1]
    for i in range(n):
        L.append(3 * L[i] + 5)
    return L

# Tests automatisés
assert suite_B(0) == [1]
assert suite_B(1) == [1, 8]
assert suite_B(2) == [1, 8, 29]
assert suite_B(3) == [1, 8, 29, 92]

print("✅ Tous les tests ont réussi !")