Récursivité en C

cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004 - 8 mai 2004 à 16:02
fulk Messages postés 2 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 24 janvier 2005 - 21 mai 2004 à 17:34
Bon je débute en C et je ne vois pas comment faire...
Mon probleme est que je dois afficher un ensemble de n éléments par exemple n=3 {a,b,c}
J'ai ca
Afficherparties(entier n)
si n=1 afficher un element
sinon afficherparties(n-1)
afficherparties(n-1) + élément n°n

comme début de fonction j'ai essayé de le traduire en C mais ca ne donne rien ca plante
Donc si quelqu'un peut m'aider ca serait super cool !

19 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
8 mai 2004 à 19:05
Cela donnerais un truc de ce genre :

void
AfficherParties(int n)
{
if (n==1)
{
printf("%d", n);
return;
}
else
AfficherParties(n-1);
return;
}

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
8 mai 2004 à 19:40
Bon voila mon code

void AfficherParties(int n)
{
if (n==1)
{
printf("%d", n);
return;
}
else
AfficherParties(n-1);
return;
}

int main(void)
{
int d;
printf("Veuillez saisir un ensemble:\n");
scanf("%d",d);
AfficherParties(d);
system("pause");
return 0;
}

Bref ca ne fait rien ca me ... je comprends pas ???
0
HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
8 mai 2004 à 20:29
scanf("%d",&d);

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
8 mai 2004 à 22:45
Oups ! Erreur corrigé mais ca ne m'affiche toujours pas les différents éléments ca m'affiche '1' et puis ca s'arrete y a un truc qui m'echappe mais je vois pas...
0

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

Posez votre question
HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
8 mai 2004 à 23:37
premiere remarque, dans ta fonction tu as :

if...
return
else....
return

ce qui se factorise en
if...
else...

return

deuxieme remarque : VIRE TES DEUX RETURN IL NE SERVE A RIEN (au contraire) ....

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
9 mai 2004 à 00:25
Voila :

void AfficherParties(int n)
{
if (n==1)
printf("%d", n);
else
AfficherParties(n-1);
}

int main(void)
{
int e;
printf("Veuillez saisir un ensemble:\n");
scanf("%d",&e);
AfficherParties(e);
system("pause");
}

Bon j'ai effectué les changements que l'on m'a conseillé mais malheuresement cela ne m'affiche que '1' ...
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mai 2004 à 16:44
Tu n'affiches rien si n != 1

void AfficherParties(int n) {
if ( n>1 )
AfficherParties(n-1);
printf("%d\n", n );
}

// Ma participation à la saturation du net:
// http://hylvenir.free.fr
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mai 2004 à 16:45
Tu n'affiches rien si n != 1

void AfficherParties(int n) {
   if ( n>1 )
      AfficherParties(n-1);
   printf("%d\n", n );
}


// Ma participation à la saturation du net:
// http://hylvenir.free.fr
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
9 mai 2004 à 18:34
Ok mais comment je fais pour gérer afficherparties(n-1) + élément n°n ?
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mai 2004 à 19:09
Qu'est ce que tu appeles élément n°n ???

Cette fonction t'affiche t'affiche toutes les valeurs.
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
9 mai 2004 à 20:06
Il faut que j'arrive à afficher par exemple pour n=3
a
b
c
a,b
a,c
b,c
a,b,c

ou de la meme maniere avec les chiffres
1
2
3
1,2
1,3
2,3
1,2,3

Donc le n°n c'est l'élément c ou 3 dans l'exemple.
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
10 mai 2004 à 22:42
Personne n'a une idée?
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
10 mai 2004 à 23:32
j'avais fait quelque chose comme ça y'a un moment...
ça fait ce que tu veux maix pour un ensemble de lettre àpartir d'une string...
tu devrais réussir avec les nombres.

void anagramme( const string& mot, tDico& liste )
{
if ( mot.size() == 1 ) {
liste.insert( mot );
return;
}

for( int pos = 0; pos < mot.size(); ++pos )
{
string ana( 1, mot[pos] );

string newM;
for ( tDico::size_type j = 0; j < mot.size(); ++j)
if ( j != pos )
newM += mot[j];

tDico newList;
anagramme( newM, newList );


for ( tDicoIter k = newList.begin();
k != newList.end(); ++k )
{
liste.insert( ana + (*k) );
if ( (*k).size() > 1 )
liste.insert( (*k) );
}
}
}

Ma participation à la saturation du net:
http://hylvenir.free.fr
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
11 mai 2004 à 10:10
Merci pour ta source mais j'ai voulu la compilé pour voir ce qu'elle faisait et elle ne compile pas ni sous Dev C++ ni sous VC++
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
12 mai 2004 à 10:12
Ce programme devrait compiler...
Le but n'est pas de te donner une source répondant à ton pb, mais une piste te permettant t'avancer dans la résolution de ton problème, sinon donne moi le mail de ton prof, ça sera plus rapide pour lui envoyer la solution.

Maintenant, si tu veux plus d'aide, il faudra me montrer TON source.

#include <set>
#include <string>
#include 
using namespace std;

typedef set<string> tDico;
typedef set<string>::iterator tDicoIter;

void anagramme( const string& mot, tDico& liste )
{
    if ( mot.size() == 1 ) {
        liste.insert( mot );
        return;
    }

    for( int pos = 0; pos < mot.size(); ++pos ) {
        string ana( 1, mot[pos] );
        
        string newM;
        for ( tDico::size_type j = 0; j < mot.size(); ++j)
            if ( j != pos )
                newM += mot[j];
        
        tDico newList;
        anagramme( newM, newList );
        
        
        for ( tDicoIter k = newList.begin();
                        k != newList.end(); ++k )
        {
            liste.insert( ana + (*k) );
            liste.insert( (*k) );
        }
    }
}

int main( int, char** )
{
    tDico liste;

    anagramme( "123", liste );

    copy( liste.begin(), liste.end(),
          ostream_iterator<string>( cout, "\n" ) );
}



// Ma participation à la saturation du net:
// http://hylvenir.free.fr
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
12 mai 2004 à 11:25
Désolé ca ne compile pas chez moi il y a un probleme avec ostream_iterator<string>( cout, "\n" ) );

Ma source est la dans le post mais ce que je voudrais savoir maintenant c'est est-ce qu'il est possible de faire afficherparties(n-1) + afficherparties(n) ?
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
12 mai 2004 à 11:50
Autant pour moi, j'ai du oublier...

#include

Ma participation à la saturation du net:
http://hylvenir.free.fr
0
cestlebonheur Messages postés 10 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mai 2004
12 mai 2004 à 19:47
Ca marche nikel maintenant et je vais mettre ma saisie dans un string car apparement ca me permettrait de gérer le n°n élément !
0
fulk Messages postés 2 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 24 janvier 2005
21 mai 2004 à 17:34
hello hello! moi j'ai essayer de compiler le source, pas moyen de le faire marcher... snif
0
Rejoignez-nous