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

Algorithmes et structures de données Discussion :

complément d'information sur la récursivité


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut complément d'information sur la récursivité
    Bonjour tout le monde,

    Quelqu'un saurait-il svp m'expliquer la récursivité.

    Je vous le dis tout de suite, j'ai vu les cours de dvp.com mais ça ne m'a pas beaucoup avancé.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f(n) = 3 * f(n-1) + 2
    f(0) = -2
     
     
    f(4) = 3 * f(3) + 2 = 3 * -28 + 2 = -82
    f(3) = 3 * f(2) + 2 = 3 * -10 + 2 = -28
    f(2) = 3 * f(1) + 2 = 3 * -4 + 2 = -10
    f(1) = 3 * f(0) + 2 = 3 * -2 + 2 = -4
    f(0) = -2
    Je me demande où on va chercher ce -28, idem pour le -10 et le -4.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FONCTION   F(n);
    PARAMETRES n : ENTIER; [I]
    RETOUR     ENTIER;
    DEBUT
      SI n > 0 ALORS
        RETOURNER 3 * f(n-1) + 2;
      SINON
        RETOURNER -2;
      FIN SI
    FIN
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f(n) = 3 * f(n-1) + 2
    f(0) = -2
     
     
    f(4) = 3 * f(3) + 2 = 3 * -28 + 2 = -82
    f(3) = 3 * f(2) + 2 = 3 * -10 + 2 = -28
    f(2) = 3 * f(1) + 2 = 3 * -4 + 2 = -10
    f(1) = 3 * f(0) + 2 = 3 * -2 + 2 = -4
    f(0) = -2
    Je me demande où on va chercher ce -28, idem pour le -10 et le -4.


    3* -10 = -30
    -30 + 2 = -28

    3* -4 = -12
    -12 + 2 = -10

    3*-2 = -6
    -6 + 2 = -4

    Si tu ne sais pas ça, euh!!! que fais-tu en programmation ??????

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    -10, -4 et -2 se sont donc des paramètres qu'on reçoit et qui ont été inventés pour l'exercice ?

    S'étais juste ça ma question, le calcul, je l'avais compris

    @+

    beegees

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par beegees Voir le message
    Bonjour,

    Merci pour ta réponse.

    -10, -4 et -2 se sont donc des paramètres qu'on reçoit et qui ont été inventés pour l'exercice ?

    S'étais juste ça ma question, le calcul, je l'avais compris
    Tu n'as pas l'air pourtant....
    -10, -4 ou -2 ne sont pas des paramètres, ce sont les valeurs de f(2), f(1) et f(0), qui sont calculées par l'algorithme (sauf f(0) qui est effectivement une valeur codée en dur dans l'algorithme, ce qu'on appelle le cas de base de la récursion).

    --
    Jedaï

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonsoir,

    la récursivité c'est lorsqu'une fonction se rappelle elle même (définition grossière).
    Comme tu le vois dans l'exemple que tu proposes "f(n) = 3 * f(n-1) + 2", pour calculer f(n), il te faut connaître f(n-1), ... pour caculer f(1) il te faut connaître f(0). Donc il te faut calculer le terme précédent à chaque étape jusqu'à f(0).

    La première chose à faire lorsque tu entres dans une fonction récursive, c'est le test d'arrêt (afin d'éviter de boucler infiniment).

    Expliquons un peu l'algorithme que tu étudies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FONCTION   F(n);
    PARAMETRES n : ENTIER; [i]
    RETOUR     ENTIER;
    DEBUT
      SI n > 0 ALORS //Test d'arrêt : on continu s'il y a encore des termes, sinon on renvoie f(0)
        RETOURNER 3 * f(n-1) + 2; // On est pas encore à f(0), donc on fait le calcul en appelant f(n-1) et en effectuant le calcul.
      SINON
        RETOURNER -2; // On est à f(0), donc on en revoe sa valeur
      FIN SI
    FIN
    Bonsoir Toto13 et merci pour ta réponse.

    En fait je savais que s'est une fonction qui s'appelle mais ce que tu indiques est très intéressant, surtout quand tu me dis que la première chose à faire est de tester l'arrêt.

    Merci aussi pour l'explication de l'alogirthme, je vais l'imprimer et le mettre de côté, merci encore.

    beegees



    Citation Envoyé par Jedai Voir le message
    Tu n'as pas l'air pourtant....
    -10, -4 ou -2 ne sont pas des paramètres, ce sont les valeurs de f(2), f(1) et f(0), qui sont calculées par l'algorithme (sauf f(0) qui est effectivement une valeur codée en dur dans l'algorithme, ce qu'on appelle le cas de base de la récursion).

    --
    Jedaï
    Bonsoir Jedaï,

    Merci pour ta réponse.

    -10, -4 ou -2 ne sont pas des paramètres, ce sont les valeurs de f(2), f(1) et f(0),
    En effet, j'avais pas compris cela

    ici :

    f(4) = 3 * f(3) + 2 = 3 * -28 + 2 = -82
    Je me demande d'où vient le -28 ?

    S'est codé en dur quand même ? non ?


    qu'est-ce que je fais sur ce forum, je devrais plutôt aller sur le forum couture

    Merci encore à vous deux.

    beegees

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par beegees Voir le message
    Je me demande d'où vient le -28 ?

    S'est codé en dur quand même ? non ?


    mais non, cela explicite le terme de gauche pour montrer comment l'algorithme marche, c'est tout....

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f(4) = 3 * f(3) + 2 = 3 * -28 + 2 = -82
    Je me demande d'où vient le -28 ?

    S'est codé en dur quand même ? non ?
    Non !!!!
    D'après la formule de récurrence, on a : f(4) = 3 * f(3) + 2
    On calcule alors f(3), et on le remplace par sa valeur dans l'expression de f(4), ça donne : f(4) = 3 * (-28) + 2

    (-28) n'est pas codé en dur, c'est le résultat du calcul de f(3).

    --
    Jedaï

  8. #8
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonsoir,

    la récursivité c'est lorsqu'une fonction se rappelle elle même (définition grossière).
    Comme tu le vois dans l'exemple que tu proposes "f(n) = 3 * f(n-1) + 2", pour calculer f(n), il te faut connaître f(n-1), ... pour caculer f(1) il te faut connaître f(0). Donc il te faut calculer le terme précédent à chaque étape jusqu'à f(0).

    La première chose à faire lorsque tu entres dans une fonction récursive, c'est le test d'arrêt (afin d'éviter de boucler infiniment).

    Expliquons un peu l'algorithme que tu étudies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FONCTION   F(n);
    PARAMETRES n : ENTIER; [i]
    RETOUR     ENTIER;
    DEBUT
      SI n > 0 ALORS //Test d'arrêt : on continu s'il y a encore des termes, sinon on renvoie f(0)
        RETOURNER 3 * f(n-1) + 2; // On est pas encore à f(0), donc on fait le calcul en appelant f(n-1) et en effectuant le calcul.
      SINON
        RETOURNER -2; // On est à f(0), donc on en revoe sa valeur
      FIN SI
    FIN
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/09/2011, 11h35
  2. complément d'information sur les triggers
    Par aldama dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 23/02/2009, 11h02
  3. Compléments d'informations sur C
    Par tom31 dans le forum Débuter
    Réponses: 2
    Dernier message: 11/01/2008, 19h16
  4. Réponses: 12
    Dernier message: 12/12/2004, 14h25
  5. Réponses: 6
    Dernier message: 28/09/2003, 17h49

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