Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: Suite de Syracuse

  1. #1
    Invité régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2011
    Messages : 26
    Points : 6
    Points
    6

    Par défaut Suite de Syracuse

    Désolé pour le post précédent, il s'agit bien de la suite dite de Syracuse et non de Césaro.

    Bonjour,

    je tente en vain de définir une fonction qui rend le n-iéme terme de cette suite définie par Un+1 = Un/2 si Un pair, et (3*Un)+1 si Un impair, à partir de Uo fixé.

    Je prends 2 variables n le rang du terme, et p le premier terme.
    Je ne parviens pas à construire la récurrence.
    Je pose
    if (= n 0)
    p
    J'ai fait des essais directs à partir de cette étape, j'ai également essayé de passer par une seconde condition sur n = 1 suivie de (even? p) p/2 sinon (3p)+1. mais je n'arrive pas à démarrer la récurrence.

    A votre avis, faut-il 2 variables?

    Merci par avance des idées qui pourraient débloquer ma réflexion.

    Cordialement.

  2. #2
    Membre à l'essai
    Inscrit en
    avril 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 18
    Points : 22
    Points
    22

    Par défaut

    Ce que je ferai de mon côté, c'est d'abord de créer une fonction qui prenant le Uo et rend une liste contenant tous les termes de la suite de Syracuse calculés. Et puis une seconde fonction, prenant comme argument la liste précédente et d'abord vérifiant si la liste a autant de termes de que celui qu'on demande et puis aller le chercher dans la liste.

    Je n'ai pas encore vraiment cherché à le faire en vrai mais voilà la manière dont je procéderai.

    EDIT : Voilà, j'ai mis en application mon idée. Je me pose juste une question. Est-ce que tu comptes tout faire toi-même ? En soit, cela serait un bon exercice mais de mon côté je n'ai pas eu le courage et j'ai employé des fonctions de la bibliothèque standard pour l'extraction du i-ème terme. Quoi que je viens de trouver une fonction qui le faisait directement.

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 558
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 558
    Points : 5 477
    Points
    5 477

    Par défaut

    So.Ta >> ton idée est tout à fait dans l'esprit du fonctionnel mais je pense qu' elle dépasse le niveau d'un débutant.
    Le plus simple à mon avis est une fonction a trois arguments (syracuse n v nmax) ou n est le numéro d'indice courant , nmax le numero d'indice désiré et v la valeur courante de la suite. On lance avec (syracuse 1 2011 100) par exemple.
    On peut ensuite réfléchir pour passer de 3 à seulement deux arguments.
    "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 : Intérieur avec jeune femme de Vilhelm Hammershoi

  4. #4
    Membre à l'essai
    Inscrit en
    avril 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 18
    Points : 22
    Points
    22

    Par défaut

    Trap.D >> Cela fait longtemps que je n'avais pas fait de Scheme d'où peut-être un légère tendance à prendre un chemin plus compliqué[1] mais c'est vrai que la solution que tu proposes est plus facile à implémenter.

    Debinfo75 >> Si tu passes encore sur ce sujet, peux-tu nous dire où en es-tu de ton côté ?

  5. #5
    Invité régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2011
    Messages : 26
    Points : 6
    Points
    6

    Par défaut

    Merci à vous.

    Je reviens sur le sujet et y réfléchis de nouveau.
    Tardivement, en tout cas pas à la mesure de votre disponibilité.
    Je vous tiens au courant de ma progression.

    A nouveau merci.
    Cordialement.

  6. #6
    Futur Membre du Club
    Profil pro almaghribi Abo trika
    Inscrit en
    novembre 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Nom : almaghribi Abo trika

    Informations forums :
    Inscription : novembre 2009
    Messages : 87
    Points : 18
    Points
    18

    Par défaut

    Bonsoir,

    si j'ai bien compris, voila un une fonction qui rend le nieme terme:

    Code :
    1
    2
    3
    4
    5
    6
    7
    (define (nieme-terme n u0)
       (let and-next ((terme0  u0)
                     (comp n))
         (cond ((zero? comp)    terme0)
               ((even? terme0) (and-next (/ terme0 2) (- comp 1))) 
               (else (and-next (+ (* 3 terme0) 1) (- comp 1))))))
    Cordialement
    E. Bazoga

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •