begin process at 2012 05 29 07:12:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

initialiser une liste : fonction récursive ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

initialiser une liste : fonction récursive ?

samedi 2 décembre 2006 à 08:59:00 | initialiser une liste : fonction récursive ?

netwebzone

Bonjour

Je dois créer une fonction qui initialise une liste chaînée à partir d'un nombre d'élement passé en paramètre pour la taille de la liste.
J'ai réussi à créer une version itérative de cette fonction ;
Code :
 
list initialize_list(list essai, int nb_element)
{
int i;
 
for(i=1;i<=nb_element;i=i+1)
{
essai = insert_tail(essai,rand()%20); //fonction qui ajoute en queue de liste un élément de valeur passé en 2eme parametre
}
 
return essai;
}
 

Mais j'ai un probleme pour créer une fonction récursive, j'ai fait ceci mais ca ne marche pas, ca me créer un seul élément :
Code :
 
list initialize2_list(list essai, int nb_element)
{
if(nb_element==1)
{
return essai = insert_tail(essai,rand()%20);
}
else
{
return essai = initialize2_list(essai,nb_element-1);

}
}
 

Si quelqu'un peut m'éclairer... merci
Bonne journée
samedi 2 décembre 2006 à 09:59:15 | Re : initialiser une liste : fonction récursive ?

mezaya

la fonction récursive doit pouvoir ajouter un element a chaque fois qu'elle est appeler. la fonction récursive doit ressembler a ça: list initialize2_list(list essai, int nb_element) { essai = insert_tail(essai,rand()%20); if(nb_element==1) { // j'arrete la récursivité return essai; } else { return essai = initialize2_list(essai,nb_element-1); } }

Voili,Voilou [;)]
samedi 2 décembre 2006 à 10:11:12 | Re : initialiser une liste : fonction récursive ?

mezaya

désolé pour la mise en page. donc revoici la fonction : list initialize2_list(list essai, int nb_element) { essai = insert_tail(essai,rand()%20); if(nb_element==1) { // j'arrete la récursivité return essai; } else { return essai = initialize2_list(essai,nb_element-1); } }
samedi 2 décembre 2006 à 10:30:15 | Re : initialiser une liste : fonction récursive ?

netwebzone

Oh miracle ca marche :) lol

Merci beaucoup mais dis-moi, est-ce que t'aurais 5 min pour m'expliquer comment t'as fait, comment t'as réfléchi pour voir ce qu'il manquait que j'essaye de comprendre ce qui m'a échappé... enfin si tu as le temps...

Merci
Bonne journée
samedi 2 décembre 2006 à 11:08:26 | Re : initialiser une liste : fonction récursive ?

mezaya

pour que la récusivité marche, il faut que pour chaque appel de initialize2_list() on ajoute un element dans la liste. Or dans ton 1er code l'ajout ne se faisait que quand (nb_elment == 1) ; ce test ne sera vrai qu'une seul fois. alors que maitenant chaque appel a initialize2_list() ajoute un element. Le test (nb_element == 1) est juste le test de fin de récusivité.
samedi 2 décembre 2006 à 11:12:57 | Re : initialiser une liste : fonction récursive ?

netwebzone

ok merci
Oui c'est vrai c'était tout bête en fait, je remarquais bien que ca m'ajoutait qu'un seul élément a chaque fois mais je comprenais pas pourquoi, il fallait juste sortir l'ajout d'élément du bloc de la condition d'arrêt, ce qui est logique en fait...

Merci beaucoup
Bonne journée
samedi 2 décembre 2006 à 11:13:47 | Re : initialiser une liste : fonction récursive ?

mezaya

un exemple : initialize2_list(list,3) -> insert_tail(list, X ) test(nb_element==1) // = FAUX initialize2_list(list,2) -> insert_tail(list, X ) test(nb_element==1) // = FAUX initialize2_list(list,1) -> insert_tail(list, X ) test(nb_element==1) // = VRAI <- <- <- FIN
samedi 2 décembre 2006 à 12:02:23 | Re : initialiser une liste : fonction récursive ?

netwebzone

ouais exactement merci je vois mieux le truc maintenant ;)

Bonne journée
dimanche 3 décembre 2006 à 10:22:54 | Re : initialiser une liste : fonction récursive ?

italiasky

Bonjour,

Euh j'ai changé la fonction de la manière suivante :

list initialize_list_rec(list essai, int nb_element)
{
if(nb_element!=0)
{
essai = insert_tail(essai,rand()%20;
return essai = initialize_list_rec(essai,nb_element-1);
}
 
return essai;
}


Elle est mieux comme ca non ? C'est pas plus "esprit récursif" ?

Merci ++


Cette discussion est classée dans : fonction, créer, liste, essai, list


Répondre à ce message

Sujets en rapport avec ce message

rang d'une liste triée et non triée [ par pinderlot ] bonjour,J'ai lu un peu ce qui se fait sur le forum au sujet des listes et des tris, j'ai relu mes cours mais je n'ai toujours pas de solutions à mon p Fusion de cellules pour une liste chainée [ par ouhare ] Bonjour tout le monde. J'aurais une question concernant une fonction en C que j'appelerais merge_list(). Cette fonction est supposée fusionner 2 cellu Liste stl et fonction constante [ par poiuytrez3 ] Bonjour,J'ai une erreur de compilation lorsque je veux définir un cursor au début de ma liste qui est dans mon objet.La fonction est constante et le c RegisterClassEx [ par Ziman ] Bonjour,je me pose une tite question. En fait, je vois dans tout les code pour l'API win32 la fonction RegisterClassEx, j'ai vu qu'elle servait à cré datagridview et événement [ par pupuce54980 ] lut tout le monde, je recherche a créer un evenement sur un datagrd view, en fait je voudrais executer une fonction et récupérer l'index de ligne d'un probleme avec une fonction de jointure des éléments de liste [ par cyrina84 ] bonjour à tous, j'ai un gros probleme dans ma fonction en Ccette fonction pren en entrée une liste chainée qui contient des couples de mots (exemple: thread [ par elbok ] salut pour tousj'ai besoin de créer un thread qui exécutera un fonction de prototype: void traitement (struct liste *l).je suis vraiment débutanant et liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet [ par timy94 ] BonjourVoici mon codeCEvenement & MyClasse::Get_Evt(){       list ::iterator pEvt;       list ::iterator pListEvt = m_Liste_Evt.begin();        pEvt problème d'une fonction sur vs.net c++ [ par stgi02 ] salut, j 'aimerai avoir des explications sur : char t; // je comprends t = (e->get_KeyChar()); // je comprends this->essai->Write((LPCVOID *)&t,sizeof Win Api : redessiner une fenêtre [ par acryline ] Bonjour déjà Bon voilà mon problème et je seche depuis quelques heures dessus. Ce serait sympa de m'aider .Je fais un petit programme en API windows .


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales