Recursivité

infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012 - 11 mai 2006 à 21:53
infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012 - 12 mai 2006 à 13:54
bonjour codeur,
je veux changer la fonction ci dessous en eliminant la valeur de retour (Noeud*) et ajoutant un autre parametre ( Noeud *p) qui est la valeur rechercher.
la declaration de cette fonction devient:

voir Noeud::place(Noeud *r,Noeud *p,vecteur v,int *pos)

comment peut on changer la definition de cette fonction?

merci d'avance pour toute proposition


Noeud* Noeud::place(Noeud *r,vecteur v,int *pos)
{
if(r->nbEntree==0)
{
pos=0;
return r;
}
for(int j=0;j<r->nbEntree;j++)
{
if((((r->fils[j])->MBR).VecteurInterRect(v))==0)
{

if((r->fils[j]->fils)==NULL)
{
*pos=j;
return r;
}
else

return place(r->fils[j]->fils,v,pos);

}


}

}

5 réponses

turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
12 mai 2006 à 11:48
void Noeud::place(Noeud *r,Noeud *p,vecteur v,int *pos)
{
if(r->nbEntree==0)
{
pos=0;
return r;
}
for(int j=0;j<r->nbEntree;j++)
{
if((((r->fils[j])->MBR).VecteurInterRect(v))==0)
{
if((r->fils[j]->fils)==NULL)
{
*pos=j;
*p=*r;
break;
}
else
return place(r->fils[j]->fils,*p,v,pos);
}
}
}

TuRn3r
0
infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012
12 mai 2006 à 13:35
j'ai essayé cette solution ca marche aussi, je ne sais pas le retur r avec void ca m'étonne.
void Noeud::place(Noeud *r,Noeud *p,vecteur v,int *pos)
{
if(r->nbEntree==0)
{
pos=0;
*p=*r;

}
for(int j=0;j<r->nbEntree;j++)
{
if((((r->fils[j])->MBR).VecteurInterRect(v))==0)
{
if((r->fils[j]->fils)==NULL)
{
*pos=j;
*p=*r;

}
else
place(r->fils[j]->fils,*p,v,pos);
}
}
}
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
12 mai 2006 à 13:50
Oups, désolé, j'avais pas vu les autres return. Avant midi je suis pas tres productif.

void Noeud::place(Noeud *r,Noeud *p,vecteur v,int *pos)
{
if(r->nbEntree= =0)
{
pos=0;
*p=*r;

}
else
for(int j =0;j<r->nbEntree;j++)
{
if((((r->fils[j])->MBR).VecteurInterRect(v))==0)
{
if((r->fils[j]->fils)==NULL)
{
*pos=j;
*p=*r;
break;
}
else
place(r->fils[j]->fils,*p,v,pos);
}
}
}

N'oublie pas le else et le break, car sinon, dans le 1er cas, il fera la boucle for quand meme, et dans le 2eme, il risque de faire trop de boucle dans le for.

Dis moi si ca marche !

TuRn3r
0
infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012
12 mai 2006 à 13:52
merci comme meme pour la proposition, et bonne apéti
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012
12 mai 2006 à 13:54
ca marche tres tres bien.
0
Rejoignez-nous