IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Récursive -> itérative


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Récursive -> itérative
    Bonjour , je voudrais transformer une fonction récursive en une fonction itérative car la version itérative, à un certain moment, cause des ennuis à la mémoire du PC. J'utilise une matrice pour colorier des cases (le but, c'est de pouvoir réussir à coder ce jeu Flood-It, ) avec une récursion sur la fonction elle-même mais là, je dois la coder en impérative en utilisant des piles. Je ne sais pas comment m'y prendre ! :/ ,aidez-moi SVP ;

    Voici le code récursif et merci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    int colorie_zone_rec(int ** mat,int i,int j,int cpt,int cl,Grille *grille){
     
     
    	int aux=mat[i][j];
    	if(((i || j ) <0 ) || ((i || j ) > (grille->nbcase) ) || (!mat[i][j]))
    		return 0;
     
    	else {
     
    		mat[i][j]=cl;
    		Grille_chg_case(grille,i,j,mat[i][j]);
    		if(aux==mat[i-1][j]){
    			cpt+=colorie_zone_rec(mat,i-1,j,cpt,cl,grille);
    		}
     
    		if(aux==mat[i+1][j]){
    			cpt+=colorie_zone_rec(mat,i+1,j,cpt,cl,grille);
    		}
     
    		if(aux==mat[i][j+1]){
    			cpt+=colorie_zone_rec(mat,i,i+1,cpt,cl,grille);
    		}
    		if(mat[i][j]==mat[i][j-1]){
    			cpt+=colorie_zone_rec(mat,i,j-1,cpt,cl,grille);
    		}
    	}
     
    	return cpt;
    }

  2. #2
    Membre expérimenté
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Par défaut
    Je te conseille d’abord de corriger puis d’améliorer ton code avant d’aller plus loin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    int colorie_zone_rec(int ** mat,int i,int j,int cpt,int cl,Grille *grille){
     
    	// On accède à la case (i, j) avant...
    	int aux=mat[i][j];
     
    	// ...de vérifier que les indices sont valides !
    	// Les tests du type "(i || j ) < 0" ont de toute manière peu de chance de fonctionner.
    	if(((i || j ) <0 ) || ((i || j ) > (grille->nbcase) ) || (!mat[i][j]))
    		return 0;
     
    	else {
     
    		// On change le contenu.
    		mat[i][j]=cl;
    		// Et on continue à le faire mais de manière différente ?
    		Grille_chg_case(grille,i,j,mat[i][j]);
     
    		// La répétition est source de tous le maux...
     
    		if(aux==mat[i-1][j]){
    			cpt+=colorie_zone_rec(mat,i-1,j,cpt,cl,grille);
    		}
     
    		if(aux==mat[i+1][j]){
    			cpt+=colorie_zone_rec(mat,i+1,j,cpt,cl,grille);
    		}
     
    		if(aux==mat[i][j+1]){
    			cpt+=colorie_zone_rec(mat,i,i+1,cpt,cl,grille); // Celui-là par exemple (j+1).
    		}
    		if(mat[i][j]==mat[i][j-1]){
    			cpt+=colorie_zone_rec(mat,i,j-1,cpt,cl,grille);
    		}
    	}
     
    	// Y a un truc pas clair avec ce compteur à la fois paramètre et valeur de retour.
    	return cpt;
    }

Discussions similaires

  1. Réponses: 13
    Dernier message: 28/12/2012, 18h24
  2. Fonction récursive vers itérative.
    Par MilkyMars dans le forum Lisp
    Réponses: 2
    Dernier message: 30/11/2012, 17h14
  3. Réponses: 6
    Dernier message: 10/01/2009, 21h18
  4. [Serveur DNS] Résolution itérative/récursive
    Par foxrol dans le forum Développement
    Réponses: 0
    Dernier message: 10/09/2007, 21h00
  5. Liste itérative ou récursive
    Par devstud dans le forum C
    Réponses: 11
    Dernier message: 04/01/2007, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo