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

Langage C++ Discussion :

conversion de valeur "compile time"


Sujet :

Langage C++

  1. #21
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Iradrille, Loic et moi même n'avons pas affirmer que vous deviez penser de manière récursive ou que "la" définition (*) de la factorielle doit être récursive (par exemple), seulement qu'affirmer que c'est naturel n'était pas objectif. Ça l'est peut-être pour vous, mais pas pour d'autre ...

    Et si je suis prêt à admettre que si l'on considère une population lambda cette affirmation est vrai, je le suis beaucoup moins dès que cette population est à caractère scientifique.

    Au début je voulais pointer sur des liens SO où les meilleurs réponses montrent bien que la récursion est naturel pour de nombreux développeur, cependant je suis tombé sur un autre article dont la conclusion me plait :
    http://www.ibm.com/developerworks/li...urs/index.html
    Recursion is a great art, enabling programs for which it is easy to verify correctness without sacrificing performance, but it requires the programmer to look at programming in a new light. Imperative programming is often a more natural and intuitive starting place for new programmers which is why most programming introductions focus on imperative languages and methods. But as programs become more complex, recursive programming gives the programmer a better way of organizing code in a way that is both maintainable and logically consistent.
    (NB: J'ai pas lu l'ensemble de l'article)
    La récursion est un art important, permettant de vérifier la justesse des programmes sans perdre de performance, mais elle demande aux développeurs d'adopter un nouveau point de vue. Les langages impératifs sont souvent plus naturel et intuitif pour les débutants, ce qui en font des langages et méthodes de choix pour les cours d’introduction. Mais plus les programmes deviennent complexes, plus la récursion apporte un meilleur façon d'organiser le code : il devient plus maintenable et logique.
    Oui, pour une personne lambda / un débutant, naturellement il va penser itératif. Mais pour quelqu'un qui commence à avoir des besoins plus importants, quelqu'un qui aura été "formé" (**) la récursion peut être un mode de penser totalement naturel (***).

    (*) leternel : C'est quoi une "définition directe" ? Et quand bien même tu arriverais à définir clairement ce concept, je vois mal comment tu pourrais l'appliquer avec certitude à une notion mathématique aussi ancienne.

    (**) peu importe la méthode de formation, et peu importe que ce soit une formation au maths ou plus spécifiquement à l'algorithmie (en général il faut pas avoir fait beaucoup d'algorithmie pour avoir fortement intégré le principe de récurrence, typiquement avoir travaillé sur les algorithmes de base des structures de données basiques suffit pour ça).

    (***) quand on a du se forcer 10 ou 20 fois à adopter un nouveau point de vue pour résoudre un problème, la 21° fois, ça a tendance à être naturel.

  2. #22
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    J'ai dis directe, par opposition à récursif, parce que la formule n'inclue aucun précalcul.
    C'est le même style de formule que moyenne = (1/n) * somme(i=1..n) (mesure i)J'aurais pu expliquer que la factorielle d'un entier n strictement positif est le produit de tous les entiers entre 1 et n, et qu'elle est étendue par 0! = 1.

    Cette définition n'est ni itérative ni récursive, elle est éventuellement qualifiable de métrique et ensembliste.

  3. #23
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    Oui, pour une personne lambda / un débutant, naturellement il va penser itératif. Mais pour quelqu'un qui commence à avoir des besoins plus importants, quelqu'un qui aura été "formé" (**) la récursion peut être un mode de penser totalement naturel (***).
    Et encore, je pense que ça dépend comment le débutant a débuté. Un prof avec qui je parlais hier me disait que depuis qu'il avait des élèves qui en prepa avaient fait un peu d'ocaml, quand ils commençaient le C++, ils utilisaient la récursion, même pour itérer sur une liste.
    Citation Envoyé par Flob90 Voir le message
    (***) quand on a du se forcer 10 ou 20 fois à adopter un nouveau point de vue pour résoudre un problème, la 21° fois, ça a tendance à être naturel.
    +1
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #24
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    je reconnais là l'effet d'ocaml…

  5. #25
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    Histoire d'apporter mon grain de sel : pour moi la récursion est quelque chose qui me demande beaucoup de réflexion la plupart du temps. J'ai dû m'y exercer pour utiliser les variadics templates.

    En réalité j'ai l'impression qu'il n'y a pas de voie naturelle : quand il s'agit de maths, pour implémenter par exemple une factorielle, une puissance, la version récursive me semble couler de source. En revanche quand je fais autre chose que des maths (c'est à dire 99% du temps) c'est clairement la version itérative qui s'impose à moi.

    Peut-être est-ce une question de paradigme ? Le fonctionnel tend à privilégier le récursif, l'impératif tend à privilégier l'itératif... Les mathématiques tendant à présenter globalement le fonctionnel, cela expliquerait bien des choses.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Interprétation des valeurs NULL et '' (double quotes)
    Par thatsallfunk dans le forum Administration
    Réponses: 2
    Dernier message: 09/01/2009, 15h21

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