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

Macros et VBA Excel Discussion :

récursivité pour une somme


Sujet :

Macros et VBA Excel

  1. #21
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    En fait, j'en conclu ceci..
    Dans une fonction ont peut employer une valeur 'récursive' à l'INTERIEUR de la fonction' mais pas au 'RETOUR' de la fonction.

  2. #22
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Salut Leforestier...

    Une fonction récursive est simple à comprendre, si tu oublies tout simplement le mot fonction ...

    Imagine simplement... je ne sais pas, moi... des seaux d'eau, par exemple... ou encore ce que fait une balle de caoutchouc lorsque tu la laisses tomber à la verticale, etc...

    Il ne faut pas se laisser impressionner par les "grands mots", juste poser un regard simple...

  3. #23
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir

    Citation Envoyé par ucfoutu Voir le message
    Salut Leforestier...

    Une fonction récursive est simple à comprendre, si tu oublies tout simplement le mot fonction ...

    Imagine simplement... je ne sais pas, moi... des seaux d'eau, par exemple...
    c'est beaucoup plus clair en effet

  4. #24
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par fred65200 Voir le message
    bonsoir


    c'est beaucoup plus clair en effet
    Huuum, Ta réponse ne l'est pas (excuse moi)

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 75
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Explique un peu vers quel tendance ta récursivité doit arrivé... ?
    Si la question est pour moi, la récursivité ne doit arriver à rien

    C'est le paramètre qui doit finir par attendre une limite (= vérifier une condition d'arret) au fur et à mesure que la fonction s'appelle elle-même.

    Le forum algo serait plus indiqué pour trouver des spécialistes.

  6. #26
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    à la question
    Citation Envoyé par Maxence45 Voir le message
    dans une fonction récursive doit on obligatoirement décrémenter la variable ?
    je n'arrive pas à faire le lien avec un seau d'eau et ta
    Function Récursif m'a un peu plus embrouillée

    fred

  7. #27
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour Maxence45.

    Un petit résumé?

    Pour reprendre ton exemple, tu connais une formule qui calcule la valeur des carrés des n premiers entiers : S2 = n*(n+1)*(2n+1)/6.
    Si tu mets en oeuvre cette formule arithmétique, tu auras une fonction qui marche, mais qui n'a rien de récursif.
    Pour mettre en oeuvre une récursivité, il te faut une formule de base qui soit récursive. Dans ton cas on a, comme l'a fait remarquer Fred :
    S(n^2) = S((n-1)^2) + n^2. Donc si on appelle f la fonction recherchée:
    f(n) = f(n-1) + n^2.
    Que veut dire cette expression? Que si je connais la valeur f(n-1), alors je peux calculer celle de f(n). Or je connais la valeur f(1) = 1 et même celle de f(0) qu'on peut décréter à 0. Tu noteras qu'on aurait aussi pu décider que f(0) n'existe pas. C'est un choix de définition.
    Donc je connais f(0) et f(1). Donc je sais calculer f(2). Donc je sais calculer f(3) etc...

    Reste à mettre en forme. Je vais partir d'une valeur n et sortir de la récursivité à 1 ou 0. Donc je dois décrémenter n à chaque appel.
    Si je dis que f(0) = 0 alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function fctSomCarre(ByVal n as long) as long
    if n> 0 Then
        fctSomCarre = fctSomCarre(n-1) + n^2
    ElseIf n = 0 Then
        fctSomCarre = 0
    Else 'n<0
        fctSomCarre = -1'pseudo code d'erreur = appel avec n<0
    End If
    End function
    Si on considère que f(0) n'existe pas, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function fctSomCarre(ByVal n as long) as long
    if n> 1 Then
        fctSomCarre = fctSomCarre(n-1) + n^2
    ElseIf n = 1 Then
        fctSomCarre =1
    Else 'n<=0
        fctSomCarre = -1'pseudo code d'erreur = appel avec n<=0
    End If
    End function
    EN espérant que cela t'aide

    PGZ

  8. #28
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Incrémenter ou décrémenter ne veut pas dire grand chose en matière de récursivité.

    On doit plutôt penser à une évolution et à une borne.

  9. #29
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    une borne.
    A+

  10. #30
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Un ptit conseil à tous....
    Prenez mon code dans un poste précédant, annuler le variable Static M
    et voyez ce que renvoi le fonction ....(F8)
    Ensuite laissez la variable static M et laissez courrir, voyez ce que renvoi la fonction...(F8)
    Si vous avez pas compris je recommence.
    A+

  11. #31
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Hello!

    Incrémenter ou décrémenter ne veut pas dire grand chose en matière de récursivité.
    C'est un point de vue.
    Mais si on reprend l'exemple de la somme des n premiers carrés, on peut écrire :
    1. f(n) = f(n-1) + n^2. n est décrémenté
    2. f(n) = f(n+1) -(n+1)^2? Ici n est incrémeté.

    Moi je vois l'intérêt opérationnel de la 1. Mais comment mettre en oeuvre la 2? Quelqu'un se le sent?
    J'en conclus que ce n'est pas une question d'opinion mais de qualité opérationnel de la formule. Et dans la pratique, ça décrémente.

    PGZ

  12. #32
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    je débute mais au moins ma question au débutante aura eu le mérite de faire ce petit débat intéressant qui m'a éclairci et peut être éclairci certains...

    je conclus que il faut soit ça décrémente , soit ça incrémente , donc c'est la notion de borne et de condition qu'il faut retenir..

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

Discussions similaires

  1. [XL-2010] Regrouper les critères pour une somme NB.SI
    Par Leakof dans le forum Excel
    Réponses: 4
    Dernier message: 22/11/2014, 23h32
  2. Procédure pour une somme en sql
    Par CatherH dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/06/2014, 11h46
  3. Réponses: 4
    Dernier message: 18/11/2010, 20h16
  4. Syntaxe pour une somme de cellules
    Par Potzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/06/2010, 14h27
  5. Réponses: 0
    Dernier message: 30/07/2008, 14h33

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