fonction recursive

fonction recursive - C++ - Programmation

Marsh Posté le 19-03-2006 à 20:16:26    

:jap: Bonjour,
j'ai la fonction recusive ci-dessu, suposons qu'on a un cas qui passe par les etapes 2/3/5/2/3/4, normalement la valeur de retour de la fonction recursive c'est r (de l'etape 4).alors que le programme me retourn NULL . Quelqu'un peux m'expliquer pourquoi? merci.
 

Code :
  1. Noeud* Noeud::place(Noeud *r,vecteur v,int *pos)
  2. {
  3.   if(r->nbEntree==0) ///       === 1 ====
  4.   { 
  5.    pos=0;
  6.            return r;
  7.   }
  8.   for(int j=0;j<r->nbEntree;j++) ///       === 2 ===
  9. {
  10.   if(((r->fils[j]->MBR).VecteurInterRect(v))==0) /// === 3 ===
  11. {
  12. if((r->fils[j]->fils)==NULL) /// === 4 ===
  13. {
  14. *pos=j;
  15. (*r).afficher();
  16. return r;
  17. }
  18. else
  19. place(r->fils[j]->fils,v,pos); /// === 5 ==  
  20. }
  21. }
  22.      return NULL;///=== 6 ===
  23. }


Message édité par d_imane le 19-03-2006 à 20:50:04
Reply

Marsh Posté le 19-03-2006 à 20:16:26   

Reply

Marsh Posté le 19-03-2006 à 20:19:18    

balise [code] :o

Reply

Marsh Posté le 19-03-2006 à 20:21:41    

tu devrais aussi enlever ces parantheses inutiles, ca rend le code peu lisible
 
if((((*r).fils[j])->fils)==NULL)
-->
if(r->fils[j]->fils==NULL)

Reply

Marsh Posté le 19-03-2006 à 20:30:17    

1. Je crois qu'au lieu de

   pos=0;

il faut

   *pos=0;


 
2. Je crois qu'au lieu de

return r;

il faut

return *r;

Reply

Marsh Posté le 19-03-2006 à 20:41:02    

pour ta premiére remarque olivthill *pos=0, c'est juste tu as raison mais ca change pas le resultat alors que pour la deuxième non, je retourn en faite un une adesse.

Reply

Marsh Posté le 19-03-2006 à 22:09:04    

Ceci
 
 

Code :
  1. place(r->fils[j]->fils,v,pos);


est anormal puisque tu n'utilises le retour de place, tu as sans doute une erreur ici.


Message édité par Trap D le 19-03-2006 à 22:10:20
Reply

Marsh Posté le 20-03-2006 à 00:15:04    

oui c'etait ca trap  D, je devais faire

Code :
  1. r=place(r->fils[j]->fils,v,pos);
  2. return r;


merci bcp

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed