Résolution d'un exercice math/python...

Greg0606
Modifié (November 2022) dans Analyse
Bonjour,
je coince sur un exercice relatif à la programmation python et aux suites mathématiques.
Voilà, niveau énoncé ça donne :
soit la suite définie par : U(0)=3 et U(1)=1 & U(n+1)=2U(n-1)+U(n)

Qestion : compléter le programme suivant afin qu'il affiche les termes de cette suite.
def U(n)....
if ......
return 3
elif n==1 :
return ....
return .....

J'ai écrit le programme suivant
def U(n):
if n==0:
return 3
if n==1:
return 1
return 2*U(n-1)+Un
for n in range(50):
print("u({}) = {}". format(n,u(n)))
mais ça ne compile pas malheureusement...
Pourriez-vous s'il vous plait m'aider ?
Je vous remercie,
bonne journée.
[Écrire du python sans tabulation ne peut pas compiler ! AD]

Réponses

  • Quel est le message d’erreur ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • olivierj50
    Modifié (November 2022)
    Bonsoir, oh le petit coquin : dans ta fonction il faut retourner U(n) et non U(n+1) sinon effectivement ça ne va pas aller !o!

    return 2*U(n-2)+U(n-1)
  • Bien vu ! 
    Un grand merci pour le coup de main, c'est sympa !
  • Math Coss
    Modifié (November 2022)
    Par ailleurs, dans la dernière ligne, on aurait préféré lire U(n) plutôt que u(n) (sans parler des questions de tabulation).
    Au passage, cette méthode récursive est catastrophique pour calculer les valeurs de cette suite. Voici les temps de calcul pour les 35 premiers termes : il faut plus de 7 secondes pour arriver à $U_{34}=22906492247$.

    Je parie qu'aucun ordinateur personnel ne peut calculer $U_{50}$ de la sorte.
    Avec la procédure « itérative » suivante, il faut une demi-microseconde à mon ordinateur pour calcule $U_{34}$.
    def V(n):
        if n==0:
            return 3
        a, b = 3, 1
        for _ in range(n-1):
            a, b = b, 2*a+b
        return b
    Il faut alors moins d'une milliseconde pour calculer $U_{1000}$, qui a plus de trois cents chiffres.
    (Désolé si je bousille la suite du sujet... Je sais faire beaucoup plus rapide que cette fonction V par ailleurs.)
Connectez-vous ou Inscrivez-vous pour répondre.