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

Shell et commandes GNU Discussion :

Récursivité, ou pas ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut Récursivité, ou pas ?
    Bonjour à tous,

    ici, je lis
    Citation Envoyé par Sve@r
    [...]la factorielle sans boucle ni récursivité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    test -z "$arg" && arg=$1 && res=1
    test $arg -eq 0 && echo $res && exit 0
    res=$(($res * $arg))
    arg=$(($arg - 1))
    source $0
    moi, je vois de la récursivité dans un script qui se source lui-même, mais s'appellerait-il (sans se sourcer), jusqu'à une condition donnée, que j'en verrais encore...
    Citation Envoyé par Sve@r
    Ressembler n'est pas jouer. Comme Canada Dry. Ca a la couleur de l'alcool, son nom sonne comme un nom d'alcool mais ce n'en est pas. Donc ça a la couleur de la récursivité, son nom sonne comme un nom de récursivité... mais ce n'en est pas

    Ceci dit, effectivement je pense qu'un débat à ce propos intéresserait pas mal de monde. Peut-être dans une section plus générale du shell...
    j'ouvre donc le débat.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Ce qui serait plus constructif serait que ceux qui pensent que ce code n'est pas récursif nous explique pourquoi, selon eux.

  3. #3
    Membre expérimenté
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Par défaut
    Pour moi aussi, c'est récursif.

    Pour l'opinion contraire, les amateurs comme moi (je n'ai utilisé source que pour sourcer des variables...) auraient pu penser à "source" comme un "include" agissant non au runtime mais en style préprocesseur, mais ça n'est pas le cas selon l'aide de bash.

    Cordialement,
    xflr6

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    http://fr.wikipedia.org/wiki/Récursivité :
    La récursivité est une démarche qui fait référence à l'objet de la démarche. Ainsi, les cas suivants constituent des cas concrets de récursivité :
    (...)
    • Écrire un algorithme qui s'invoque lui-même.
    (...)
    En informatique et en logique, une fonction ou plus généralement un algorithme qui contient un appel à elle-même est dite récursive.
    ça revient à considérer ce que fait le code plutôt que l'interface qu'il utilise pour le faire, ça a du sens non ?

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,
    En principe, dans la récursivité, il y a une notion de pile. Ici je vois plus une notion de Méta-programmation (une forme de duplication de données qui devient du code).

    PS: un simple code de factoriel(6): echo $(($(seq -s '*' 1 6)))

  6. #6
    Membre expérimenté
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Par défaut
    Bonjour,

    Citation Envoyé par disedorgue Voir le message
    dans la récursivité, il y a une notion de pile.
    "pile" me semble plus connoté "structure de données" alors que récursif est vraiment connoté "action dont la réal appelle à renouveler action".
    Certes, on peut sans doute utiliser une technique de récursion pour aller chercher dans une pile, mais c'est à mon sens plus général que ça.


    Citation Envoyé par disedorgue Voir le message
    Ici je vois plus une notion de Méta-programmation (une forme de duplication de données qui devient du code).
    C'était le sens de mon commentaire qques posts plus haut:
    [On pourrait] penser à "source" comme un "include" agissant non au runtime mais en style préprocesseur, mais ça n'est pas le cas selon l'aide de bash.
    En effet,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ help source
    source: source nom_fichier [arguments]
        Execute des commandes depuis un fichier dans le shell actuel.
     
        Lit et exécute des commandes depuis NOMFICHIER dans le shell actuel.  Les
        éléments dans $PATH sont utilisés pour trouver le répertoire contenant NOMFICHIER.
        Si des ARGUMENTS sont fournis, ils deviennent les paramètres de position
        lorsque NOMFICHIER est exécuté.
     
        Code de sortie :
        Renvoie le code de la dernière commande exécutée dans NOMFICHIER, ou le code
        d'échec si NOMFICHIER ne peut pas être lu.
    qui me donne vraiment l'impression que c'est au runtime que c'est effectué.

    De toute manière, on ne pourrait pas sortir de la duplication sans exécuter la commande test $arg -eq 0 && echo $res && exit 0.
    Donc que ce soit du point de vue "codeur" ou du point de vue "interpréteur", c'est selon moi récursif.

    Cordialement,
    xflr6

Discussions similaires

  1. [PHP 5.3] Récursivité, pas de retour
    Par Lost In Translation dans le forum Langage
    Réponses: 1
    Dernier message: 21/04/2010, 11h20
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. Probleme récursivité pas si récursive que ça
    Par kirasakuya dans le forum C#
    Réponses: 1
    Dernier message: 17/07/2008, 16h02
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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