begin process at 2012 05 30 15:59:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

recursivite


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

recursivite

dimanche 28 mars 2010 à 22:31:48 | recursivite

dida87

bonjour,ya t'il qlq 'un qui pourrait m'expliquer le deroulement de ce programme recursive seulement la recursivite car j'ai un prb avec elle :
void combinaisons(int *ens,int *cmb,int n,int p,int i,int j){
if(i<p){int k;
for(k=j;k<n;++k){cmb[i]=ens[k];
combinaison(ens,cmb,n,p,i+1,k);}
else{afficher(combinaison,p);}}
int main(){int ens[]={1,5,6,7,8};
int combi[4];
combinaison(ens,combi,5,4,0,0);}
merci
lundi 29 mars 2010 à 11:14:14 | Re : recursivite

tpoinsot

Bonjour,
il manque une accolade et tu écris combinaison avec et sans s. Est-ce la même fonction ?
Utilise les balises, c'est mieux pour te lire.
Si j'ai bien compris, afficher() sera appelé à chaque fin de la boucle du premier bloc, et combi[] contiendra progressivement toutes les valeurs de ens[] un peu comme un compteur de vitesse :

ens[0], ens[0], ens[0], ens[0],
ens[0], ens[0], ens[0], ens[1],
...
ens[0], ens[0], ens[1], ens[0],
ens[0], ens[0], ens[1], ens[1],
...
ens[5], ens[5], ens[5], ens[5],

combi[] est rempli avec que des 8 (dernière valeur de ens[]) avant d'appeller afficher(combinaison,p).
Là, combinaison, c'est quoi ? Ce doit plutôt être afficher(cmb, p)

Code C/C++ :
void combinaisons(int *ens,int *cmb,int n,int p,int i,int j)
{ 
  if(i<p) {
    int k; 
    for(k=j;k<n;++k) {
      cmb[i]=ens[k]; 
      combinaison(ens,cmb,n,p,i+1,k);
    } 
  } // MANQUE DANS TON CODE
  else {
    afficher(combinaison,p);
  }
} 
int main(){
  int ens[]={1,5,6,7,8}; 
  int combi[4]; 
  combinaison(ens,combi,5,4,0,0);
} 


lundi 29 mars 2010 à 22:27:35 | Re : recursivite

dida87

bonjour,je me suis tromper dsl ,le voici le code mais j'ai pas compris le deroulement de la fct recursive:

#include <stdio.h>
#include <stdlib.h>




void afficher(int *p,int n){
int i;

for(i=0;i<n;++i)
printf("%d",p[i]);
printf("\n");

}
void combinaisons(int *ens, int *combinaison, int n, int p, int i, int j) {
if (i<p) {
int k;

for (k=j; k<n; k++) {

combinaison[i] = ens[k];

combinaisons(ens,combinaison,n,p,i+1,k);

}
}
else {
afficher(combinaison,p);
}
}








int main()
{
int ens[] = {5,9,3,4};
int combi[2];

combinaisons(ens,combi,4,2,0,0);


return 0;
}
merci,
est ce qu'il ya une fct recursive qui permet de generer toutes les combinaisons entres plusieurs tableau??en C
merci pr l'aide
mercredi 31 mars 2010 à 08:41:01 | Re : recursivite

tpoinsot

Pour comprendre la récursion, reproduit la à la main, ligne par ligne, et essaie d'en voir le systèmatisme.
Un peu comme une suite Un = f(Un-1). Il faut un porte de sortie (convergence de la suite) sinon, ça tourne indéfiniment.

Dans ton cas la récursion est produite par l'appel
Code C/C++ :
combinaisons(ens,combinaison,n,p,i+1,k); 

qui augmente i, et la sortie de la récursion se fait sur afficher() quand i>=p
Soit alors :
Code C/C++ :
if (i<p) { 
  ...
  combinaisons(ens,combinaison,n,p,i+1,k);
  ...
} 
else { 
  afficher(combinaison,p); 
} 


Après afficher(), le programme revient après l'appel à combinaisons().

Maintenant, regarde la boucle :

k=0
Code C/C++ :
    cmb[0]=ens[0]; 
      combinaison(ens,cmb,n,p,1,0);

rappel :
Code C/C++ :
cmb[1]=ens[0]; 
      combinaison(ens,cmb,n,p,2,0);

etc... jusqu'à p-1 : afficher().
Code C/C++ :
cmb[p-1]=ens[0]; 
      combinaison(ens,cmb,n,p,p,0);// provoque afficher()


A ce moment, tous les cmb[] contiennent ens[0].
et première sortie de combinaison() : i = p-1 et on passe à k=k+1 (donc 1)
Code C/C++ :
cmb[p-1]=ens[1]; 
      combinaison(ens,cmb,n,p,p,0);

tous les cmb[] contiennent ens[0], sauf le dernier qui contient ens[1].
etc...

Ta dernière question est différente. Je ne sais pas s'il y en a déjà, alors il faut la faire ou la trouver (google !)
dimanche 18 avril 2010 à 13:51:55 | Re : liste

dida87

Bonjour,je voulais mettres toutes les combinaisons que j'ai trouver dans une strucure (liste ) en c ,pour faire ensuite combinaisons entre ces listes ,si vous avez une idee ,vraiment c'est urgent,Merci


Cette discussion est classée dans : int, combinaison, ens, cmb, recursivite


Répondre à ce message

Sujets en rapport avec ce message

Prob avec "!" [ par saturne_1606 ] Bonjour a tous!Voila, mon prob est que g créer une classe qui permet de manipuler des ensembles d'entier. Et là, g une fonction membre qui vérifie si Language C probleme de compilation [ par Keymi ] Quand je compile ce programme j'obtient : 15 [Warning] return type of 'main' is not `int' . Je ne vois pas du tout comment corriger ou est l'erreur :s Probleme pour une boucle en C++ [ par Liquid043 ] De facon simple ce que j'essaie de faire c'est de générer 6 nombre aléatoire compris entre 1 et 49  tout en evitant que dans une série deux numéros se combinaison / factorielle [ par sacredead ] bonjour, j'aimerais écrire une équation comportant des combinaisons C(n,k). étant donné que je ne connais pas la syntaxe, j'aimerais passer par les fa Envoyer un pointeur sur un tableau [ par xcxl ] Bonjour, J'ai une question sur les pointeurs à vous poser (décidément les pointeurs y'a pas plus complexe...erreur de segmentation à chaque fois) J' probleme avec une chaine de caractere [ par joben22 ] Bonsoir, j'ai un petit soucis avec une fonction que j'essaie de coder. En fait, je lis le contenue d'un fichier, le place dans un char* et la j'aimer Pointeur et type non défini [ par yvesyves ] Hello, Voici mon code : [code=cpp] struct sommet { std::vector m_arr_som; //arretes du sommet (pointeur) int m_value; probleme de selection dans opengl [ par oswa ] bonjour, svp j'ai besoin d'un aide urgent. en effet, j'ai realiser un programme en c++ qui utilise opengl. ce programme permet de dessiner plusieurs Caster un int dans un char (char * ?) [ par snoop44 ] Bonjour a tous ! Voila mon petit soucis : Je souhaite "caster" un int pour l'écrire dans un char* avant de faire appel a une fonction qui requiert un question programmation sous unix pour le fork [ par crazy222 ] Bonjour tous le monde voila j'essai de finir un travail mais j'y arrive pas avec quelque lacune en programmation , mon bute c'est que le processus fil


Nos sponsors


Sondage...

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,250 sec (4)

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