
La suite proposée n'est ni une suite arithmétique, ni une suite géométrique. On ne peut donc pas proposer une fonction qui retourne le terme explicite directement (à moins d'avoir étudié mathématiquement cette suite pour trouver l'expression du terme général).

\begin{enumerate}
\item Solution avec boucle itérative:

\begin{python}
def u(n):
    v = 7
    for k in range(1,n+1):
        v = 0.5*v + 2

    return v
\end{python}

\item Solution sous forme récursive:

\begin{python}
def u(n):
    if n == 0: return 7
    else: return 0.5 * u(n-1) + 2
\end{python}

\item Solution avec une boucle conditionnelle:

\begin{python}
def u(n):
    v = 7
    k = 0
    while k < n:
        v = 0.5 * v + 2
        k = k + 1

    return v
\end{python}
\end{enumerate}

Les trois solutions renvoient le même résultat:

\bigskip

\begin{console}
>>> u(8)
4.01171875
\end{console}

\begin{rem}
La solution avec boucle conditionnelle est à mes yeux la moins performante.

En effet, elle introduit une variable \texttt{k} en plus des variables \texttt{u} et \texttt{n}. En terme informatique, cela implique un espace mémoire occupé supplémentaire.
\end{rem}
