Récursive en itérative

dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011 - 13 janv. 2006 à 23:04
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011 - 15 janv. 2006 à 12:26
Salut les amis, voilà mon prob :

J'ai une fonction récursive que je veux mettre, pour des raisons de simplicité, en itérative. Voilà cette fonction :



void melanger(char *tab,int deb,int fin)

{

int i;

char tmp;

char tab1[NB];

cpTab(tab1,tab,NB);



if( (fin-deb+1)>=3 )

for(i=deb; i<=fin; i++)

{

melanger(tab1,deb+1,fin);

swap(tab1[deb],tab1[i+1]);

}

else

{

afficheTab(tab1,NB);

swap(tab1[deb],tab1[fin]);

afficheTab(tab1,NB);

}

}

donc si quelqu'un à une petite idée qui pourrai me mettre sur la voie, merci

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 janv. 2006 à 23:35
Un mélangeur de chaine que tu veux ?
Si oui je viens de faire et semble aller.

void __stdcall MelangeChaine(char *psz)
{
int len, pos, i;
char c; i len strlen(psz);
if(len < 2) return;
srand(GetTickCount());
do { while((pos rand() % len) i);
i--;
c = psz[i];
psz[i] = psz[pos];
psz[pos] = c;
} while(i);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
char buf[12];
strcpy(buf, "Hello Word");
MelangeChaine(buf);
MessageBox(0, buf, szappname, 0);
return 0;
}

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
14 janv. 2006 à 19:17
en fait ma fonction affiche toute les possibilité de combinaison du tableau tab...
Seulement je l'ai fait en récursive (c'est plus simple), et il me la faudrais en itérative.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 janv. 2006 à 19:44
"que je veux mettre, pour des raisons de simplicité, en itérative"

Non justement, un code récursif est souvent plus simple a comprendre
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
15 janv. 2006 à 01:50
C'est juste le code où la fonction sera utilisé qui sera plus simple...
Alors pas d'idée ?!
0

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

Posez votre question
KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007
15 janv. 2006 à 02:41
Je ne vois pas comment tu veux mettre ca en itératif : ce n'est pas comme si tu calculais la valeur d'une suite au rang n par exemple; dans ce cas tu fais une écriture itérative pour éviter des calculs inutiles. Or toi, dans ton cas précis tu cherche justement à avoir toutes les combinaisons. Par conséquent l'écriture récursive me semble la meilleure.
La seule chose que je vois c'est que tu souhaiterais peut etre que les résultats s'affichent dans un autre ordre que l'ordre actuel mais sinon ta fonction est bonne.
Ou alors (derniere solution qui se rapproche le plus de l'itératif mais ca n'en est pas )
tu traites ton tableau case par case (en faisant progresser un curseur)et tu essaye pour chaque case toutes les valeurs possibles (c'est à dire qui ne sont pas déjà "prises" dans les cases précédentes)
Voilà en espérant que ca t'aide.
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
15 janv. 2006 à 12:26
Je dois travailler sur chaque combinaison trouvée, mais comme la
fonction est récursive cela m'oblige à mémoriser toute les
combinaisons. et comme vous pouvez le voir, le nombre de combinaison
possible est variable et peut être très très grand.
0
Rejoignez-nous