Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Inscrit en
    mai 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 24
    Points : 3
    Points
    3

    Par défaut (Très)petit casse tête

    Bonjour,

    Voici mon problème, je voudrais arriver à faire ceci en C LISP :

    1
    2
    3
    4
    5

    Avec une fonction (compte 5) par exemple. Cette fonction imprime donc les chiffre de 1 à 5. Mais la difficulté serait de la faire en récursivité.

    Voila donc mon premier programme :
    Code :
    1
    2
    3
    4
    5
    6
    (defun compte(nbr &aux compteur)
    (setq compteur 0)
    (cond
    ((equal nbr compteur) 0) 
    ((print (+ compteur 1))(compte (- nbr 1)))
    Cette fonction m'affiche ceci :

    1
    1
    1
    1
    1
    0
    Ce qui est normal car la variable compteur est redéfini à chaque appel de la fonction ...

    Alors ma question est simple comment arriver au résultat indiqué plus haut de manière récursive et non itérative ?

    Je vous remercie de me mettre sur la voie.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 571
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 571
    Points : 6 001
    Points
    6 001

    Par défaut

    Tu n'as pas besoin d'un setq. Il suffit d'avoir une fonction de ce type
    (compte valeur_courante valeur_max), tu affiches la valeur courante, tu l'incrémentes et tu continues par récursivité jusqu'à la valeur max. Il faut simplement faire attention aux bornes de départ et de fin.
    "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

  3. #3
    Invité de passage
    Inscrit en
    mai 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 24
    Points : 3
    Points
    3

    Par défaut

    Oui tout à fait, j'ai oublier de le dire mais j'ai déjà fait cela. Je voudrais donc savoir si c'est possible d'arriver au même résultat sans cette astuce. Par exemple j'ai trouvé un autre astuce du type.

    (compte1 valeur)
    (
    (compte2 0 valeur_max)
    )

    Je me sert donc de la fonction compte1 pour cacher la fonction compte2.
    Mais j'aimerais bien trouver la solution sans utiliser cette astuce.

    Est-ce possible ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 571
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 571
    Points : 6 001
    Points
    6 001

    Par défaut

    J'avoue que je ne comprends pas trop ce que vous recherchez
    "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

  5. #5
    Membre à l'essai
    Homme Profil pro yorick
    Étudiant
    Inscrit en
    avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Nom : Homme yorick
    Localisation : Finlande

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 27
    Points : 23
    Points
    23

    Par défaut

    Citation Envoyé par alcibiade Voir le message
    Bonjour,

    Voici mon problème, je voudrais arriver à faire ceci en C LISP :

    1
    2
    3
    4
    5

    Avec une fonction (compte 5) par exemple. Cette fonction imprime donc les chiffre de 1 à 5. Mais la difficulté serait de la faire en récursivité.

    Voila donc mon premier programme :
    Code :
    1
    2
    3
    4
    5
    6
    (defun compte(nbr &aux compteur)
    (setq compteur 0)
    (cond
    ((equal nbr compteur) 0) 
    ((print (+ compteur 1))(compte (- nbr 1)))
    Cette fonction m'affiche ceci :

    1
    1
    1
    1
    1
    0
    Ce qui est normal car la variable compteur est redéfini à chaque appel de la fonction ...

    Alors ma question est simple comment arriver au résultat indiqué plus haut de manière récursive et non itérative ?

    Je vous remercie de me mettre sur la voie.
    je m'y met!

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
  •