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

Scheme Discussion :

Récurrence 2


Sujet :

Scheme

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    Par défaut Récurrence 2
    Bonjour,
    Je ne comprends pas j'ai été déconnecté avec prise en compte de mon message !!!
    Cela ne fait que 15 jours que j'apprends ce langage. J'ai déjà écrit quelques programmes de récurrence qui variaient tous de n à zéro. Je me casse la tête sur cet exercice qui , me semble-t-il, varie de 0 à n avec initialisation à 0.
    Cela m'ennuie de demander de l'aide mais je suis vraiment bloqué:

    on considère la suite réelle définie de la manière suivante :
    u0=C0
    un=n2+C×un−1
    où C0 et C sont des constantes fixées initialement et n∈ℕ .
    Écrire la définition complète de la fonction (terme-u n c c0) qui renvoie la valeur du n-ième terme de la
    suite u pour C0=c0 et C=c


    Si vous pouviez m'aider, ça me rendrait service.
    Salutations

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ça commence comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (define (serie n c c0)
      (if (= n 0)
          ....
          ...))
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    Par défaut Solution et question
    Citation Envoyé par Trap D Voir le message
    Ça commence comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (define (serie n c c0)
      (if (= n 0)
          ....
          ...))

    OK Merci après 2 jours de tatonnement je pense avoir trouvé:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (terme-u n c c0)
      (let (( p n))
            (if (= p 0)
             c0
            (if (<= p n) 
                (+ (* p p) (* c (terme-u (- p 1) c c0)))))))
    Je n'avais pas compris que Scheme gardait en mémoire les calculs à chaque récursion et les développait à la fin. J'ai réussi mais je ne comprends pas comment il interprète que c0 est le premier terme de la série!!!!

    Salutations

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ben, lorsque n est égal à 0, tu as le premier terme de la série, donc tu renvoies c0 (enfin pour moi ça paraît clair ).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Ben, lorsque n est égal à 0, tu as le premier terme de la série, donc tu renvoies c0 (enfin pour moi ça paraît clair ).
    OK pour un confirmé dans le langage mais, dans mon exemple, quand on passe au calcul de C1, comment Scheme dans la formule de calcul sait-il qu'il faut prendre C0 comme base de calcul. Je pose certainement un faux problème mais j'aimerais bien comprendre. Peut-être que ma question n'est pas claire du fait que je ne comprends pas.

    Merci pour votre aide

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par debmaths Voir le message
    OK pour un confirmé dans le langage mais, dans mon exemple, quand on passe au calcul de C1, comment Scheme dans la formule de calcul sait-il qu'il faut prendre C0 comme base de calcul. Je pose certainement un faux problème mais j'aimerais bien comprendre. Peut-être que ma question n'est pas claire du fait que je ne comprends pas.

    Merci pour votre aide
    OUF !! J'ai enfin compris. L'addition est cumulative, à chaque itération il y a cumul en mémoire avec Cn,...C2, c1 , C0 ; à la fin les C sont remplacés par leur valeur. Pour un débutant ce n'était pas évident.

    Salutations

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    C'est vrai qu'on oublie un peu les difficultés de compréhension des mécanismes de bases au bout d'un certain temps
    Un petit clic sur
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    Il me semble que ton code pourrait être beaucoup simplifié, en faisant disparaître cette variable "p" qui ne sert apparemment à rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (define (terme-u n c c0)
            (if (= n 0)
             c0
             (+ (* n n) (* c (terme-u (- n 1) c c0)))))
    Cordialement,

    Nicolas

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Et je tente une version terminalement récursive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (terme-u-n-connaissant-u-p n p u-p c)
      (if (= n p)
          u-p
          (terme-u-n-connaissant-u-p n (+ p 1) (+ (* (+ p 1) (+ p 1)) (* c u-p)) c)))
    (define (terme-u n c c0)
      (terme-u-n-connaissant-u-p n 0 c0 c))

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Pour le fun, une version avec continuation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (define (cont-serie n c c0 k)
      (if (= n 0) 
          (k c0)
          (cont-serie (- n 1) c c0 (lambda (v) (k (+ (* n n) (* c v))))))) 
    
    (define (serie n c c0) 
      (cont-serie n c c0 (lambda (v) v)))
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Lister un nombre de résultats par récurrence
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/02/2007, 20h53
  2. Récurrence en perl ?
    Par Darkroro dans le forum Langage
    Réponses: 9
    Dernier message: 17/01/2007, 19h05
  3. Réponses: 4
    Dernier message: 09/01/2007, 21h50
  4. Clause where définie "en récurrence"
    Par Anduriel dans le forum Requêtes
    Réponses: 23
    Dernier message: 08/05/2006, 20h15
  5. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59

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