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 PHP Discussion :

Garder en mémoire une valeur pour une fonction à récursivité


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut Garder en mémoire une valeur pour une fonction à récursivité
    Bonjour à tous,

    Désolé, pour ce problème de débutant, mais je ne sais pas comment garder en mémoire une valeur pour une fonction récursive.

    Je vais vous montrer un exemple tout bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function soustrait($n)
    {
      if( $n > 5 )
      {
         $t = $n - 5;
         soustrait($t);
      }
       return $t;
    }
    echo soustrait(22);
    Avec cette fonction j'obtiens pour résultat 17, hors ce n'est pas ce que je désire obtenir, je souhaites que tant que le nombre est supérieur à 5, la fonction s'appelle, que donc au final, le résultat soit de 2.

    Comment fait-on pour obtenir ceci ?

    Merci !

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    remplace par

  3. #3
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Ah yes
    J'aurais dû y penser

    Merci

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Tu n'es pas obligé d'utiliser une fonction récursive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function soustrait($n) {
      while ($n<=5) {
        $n=$n-5;
        }
      return $n;  
      }
    echo soustrait(22);

  5. #5
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par vg33
    Tu n'es pas obligé d'utiliser une fonction récursive
    Il me semble que c'est valable dans tous les cas, et qu'à chaque algorithme itératif on peut faire correspondre un algorithme récursif (et inversement). A confirmer.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par Eusebius
    Il me semble que c'est valable dans tous les cas, et qu'à chaque algorithme itératif on peut faire correspondre un algorithme récursif (et inversement). A confirmer.
    De façon générale, ce doit être vrai.
    Mais, à ma connaissance, il vaut mieux éviter une fonction récursive, pour des raisons de performances et vu le risque de boucles infinies et de résultats aberrants.
    Tu confirmes ?

  7. #7
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Ah j'ai une autre question sur ce même sujet.

    Cette fois ci, je souhaites garder dans un coin, le résultat d'une opération, qui sera effectué à chaque appel récursif.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $array= array();
    function divise($n, $d)
    {
      $r = $n/$d;
      $array[] = $r;
      if( !is_float($r) )
        return divise($r, $d);
      return $array;
    }
    print_r(divise(20, 5));
    Donc ici, je voudrais que mon array() soit complété au fur et à mesure tant que $r n'est pas un nombre à virgule.

    C'est possible de faire ça ?
    Je suis obligé de le passer en paramètre de la fonction ?

    Oui vg33, mais cette fonction n'était qu'à titre d'exemple, je sais bien que la récursivité est inutile ici, d'ailleurs même la fonction ne sert à rien

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par Xunil
    Donc ici, je voudrais que mon array() soit complété au fur et à mesure tant que $r n'est pas un nombre à virgule.
    Tu dois déclarer ton array comme variable globale.

  9. #9
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Si j'ai bien compris ce que tu veux faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $array= array();
    function divise($n, $d)
    {
      $r = $n/$d;
      if( !is_float($r) ) {
        $arr = divise($r, $d);
        array_push($arr, $r);
        return $arr;
      }
      else {
        $arr[] = $r;
        return $arr;
      }
    }
    print_r(divise(20, 5));
    Code non testé.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. comment garder en mémoire la valeur d'une variable
    Par java250r dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/04/2012, 18h53
  3. Réponses: 2
    Dernier message: 15/07/2011, 22h48
  4. Réponses: 5
    Dernier message: 19/11/2010, 12h28
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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