IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Calcul d'une suite numérique avec une approche itérative et récursive


Sujet :

Turbo Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Par défaut Calcul d'une suite numérique avec une approche itérative et récursive
    Bonjour à tous:

    l'énoncé de l'exercice:
    Soit la suite (U) définie par:
    U0= 2
    U1= 3
    Un = Un-1+ 2*Un-2 pour tout n >= 2

    ecrire un programme qui saisi un entier n , calcul et affiche Un
    Voici ma solution récursive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    uses wincrt;
    var
    n:integer;
     
           function calcul (n:integer):integer;
     
     
           begin
     
     
           if n=0 then calcul:=2
           else if n=1 then calcul:=3
           else
               begin
     
     
               calcul:=calcul(n-1)+2*calcul(n-2);
               end;
     
           end;
     
    begin
    write('N= ');
    readln(n);
    write(calcul(n));
    end.
    je n'a pas pu formuler la solution itérative.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 964
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 964
    Par défaut
    Goe,

    Pour trouver, il suffit d'analyser un peu la formule, OU, d'analyser la liste des quelques premières valeurs obtenues (plus facile, car ça saute littéralement aux yeux).

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x:=2 ;
    y:=3 ;
    // ... traiter cas particuliers (n<2)
    for i=2 to n do begin z:=y+2*x ; x:=y ; y:=z ; end ;
    result:=z

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Par défaut Calcul d'une suite numérique avec une approche itérative et récursive

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 964
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 964
    Par défaut
    Keo,
    Citation Envoyé par Graffito Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x:=2 ;
    y:=3 ;
    // ... traiter cas particuliers (n<2)
    for i=2 to n do begin z:=y+2*x ; x:=y ; y:=z ; end ;
    result:=z
    On peut faire mieux (calcul direct sans la moindre boucle ).

    Nettement mieux même, car la boucle montrée ici ne fait que calculer toutes les valeurs qui seraient renvoyées par la fonction de 0 à n (si on a ajouté le traitement des cas n=0 et 1), ce qui n'est pas très efficace.

  6. #6
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut
    Bonsoir,

    Citation Envoyé par droggo Voir le message
    Keo,

    On peut faire mieux (calcul direct sans la moindre boucle ).
    Tu voulais parler de ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un = (5 * 2^n + (-1)^n) / 3
    Citation Envoyé par droggo Voir le message
    Nettement mieux même, car la boucle montrée ici ne fait que calculer toutes les valeurs qui seraient renvoyées par la fonction de 0 à n (si on a ajouté le traitement des cas n=0 et 1), ce qui n'est pas très efficace.
    Cependant, ce n'est pas vraiment intéressant de l'utiliser si on débute en programmation, ce qui est le cas ici : le posteur du message désire apprendre les bases de la programmation et par la même occasion, comment fonctionne une boucle, entre autres. Il ne cherche donc pas à optimiser son programme et non plus une formule « magique » comme celle sus-citée. Bref, je rejoins Graffito quoique je comprends parfaitement ta réaction !

    --
    Wachter

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 964
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 964
    Par défaut
    Jei,
    Citation Envoyé par Wachter Voir le message
    Bonsoir,


    Tu voulais parler de ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un = (5 * 2^n + (-1)^n) / 3
    Cependant, ce n'est pas vraiment intéressant de l'utiliser si on débute en programmation, ce qui est le cas ici : le posteur du message désire apprendre les bases de la programmation et par la même occasion, comment fonctionne une boucle, entre autres. Il ne cherche donc pas à optimiser son programme et non plus une formule « magique » comme celle sus-citée. Bref, je rejoins Graffito quoique je comprends parfaitement ta réaction !

    --
    Wachter
    Il cherche à écrire une version non récursive. Il n'est dit nulle part qu'il s'agit d'apprendre à faire une boucle.

    Et à partir du moment où on se passe de la récursivité, autant écrire le code le plus performant, et non une boucle qui ne fait finalement que cacher la récursivité en refaisant tout le calcul à chaque appel.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/02/2015, 11h19
  2. Réponses: 6
    Dernier message: 08/01/2014, 14h26
  3. Couplage d'une cartographie numérique avec un GPS
    Par berberat dans le forum Windows
    Réponses: 1
    Dernier message: 07/06/2007, 11h14
  4. Réponses: 10
    Dernier message: 30/11/2006, 23h06
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo