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 :

transformer de l'itératif en récursif


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Par défaut transformer de l'itératif en récursif
    salu, j'ai un problème avec un programme je fais donc appelle a vos conseils, merci d'avance.

    l'éxo:
    le but est de placer 8 reines sur un échiquier sans qu'elles ne puissent s'atteindre en un seul coup (l'échiquier est un damier de 8*8 cases) (une reine peut ce deplacer en ligne / colone / diagonale)

    voici le code en itératif qui realise cette exercice poru 4 reines sur un damier de 4*4 cases:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <stdio.h>
     
    int jeu_des_reines()
    {
        int tab[9];
        tab[1] = 1;    
     
        while (tab[1] < 5)
        {
              tab[2] = 1;
              while (tab[2] < 5)
              {
                    if ((tab[2] != tab[1]) && (tab[2] != tab[1]+1) && (tab[2] != tab[1]-1))
                    {
                           tab[3] = 1;
                           while (tab[3] < 5)
                           {
                                 if ((tab[3] != tab[1]) && (tab[3] != tab[2]) && (tab[3] != tab[1]+2) && (tab[3] != tab[1]-2) && (tab[3] != tab[2]+1) && (tab[3] != tab[2]-1))
                                 {
                                         tab[4] = 1;
                                         while (tab[4] < 5)
                                         {
                                               if ((tab[4] != tab[1]) && (tab[4] != tab[2]) && (tab[4] != tab[3]) && (tab[4] != tab[1]+3) && (tab[4] != tab[1]-3) && (tab[4] != tab[2]+2) && (tab[4] != tab[2]-2) && (tab[4] != tab[3]+1) && (tab[4] != tab[3]-1))
                                               {
                                                           printf("%d", tab[1]);
                                                           printf("%d", tab[2]);
                                                           printf("%d", tab[3]);
                                                           printf("%d", tab[4]);
                                                           printf("\n");
                                               }
                                               tab[4]++;
                                         }
                                 }
                                 tab[3]++;
                           }
                    }
                    tab[2]++;
              }
              tab[1]++;
        }
    }
     
    int main()
    {
        jeu_des_reines();
        return (0);
    }
    comme vous le voyez les conditions des if sont assez monstrueuses comment est il possible de transformer ce code pour utiliser la recursivitée svp

  2. #2
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    Tu devrais plutot aller voir du coté du forum d'algo

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Par défaut
    j'ai été voir en section algo (notament le poste persistant sur la recursivité), mais étant débutant en programmation je m'embrouille en lisant les codes en algo.
    le seul langage que je comprend un peu c'est le C c'est pourquoi j'ai poster ici

  4. #4
    Membre confirmé Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Par défaut
    l'éxo:
    le but est de placer 8 reines sur un échiquier sans qu'elles ne puissent s'atteindre en un seul coup (l'échiquier est un damier de 8*8 cases) (une reine peut ce deplacer en ligne / colone / diagonale)

    voici le code en itératif qui realise cette exercice poru 4 reines sur un damier de 4*4 cases:
    ton programme donne çà:
    çà represente quoi ? la 1ere reine se trouve sur 2 3 ou sur 2 4 ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Par défaut
    représente les position des reines il y a 2 lignes donc 2 solution:

    0: emplacement vide
    X: reine

    pour: 2 4 1 3

    0 0 X 0
    X 0 0 0
    0 0 0 X
    0 X 0 0

    pour: 3 1 4 2

    0 X 0 0
    0 0 0 X
    X 0 0 0
    0 0 X 0

  6. #6
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    L'exo des 8 reines est un des exos d'algo les plus repandus sur le net....

    Il y a 92 solutions differentes... Comme ca deja tu pourras savoir si c'est juste ou pas.

    Le principe de l'algo recursif est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int      8_reines(int nb_de_solutions, echiquier, numero de ligne)
    {
      pour (chacune des 8 cases de la ligne):
        si (tu peux placer une reine sur une case)
          {
            tu la places;
            nb_de_solutions += (la meme fonction, une ligne plus bas)
          }
        si (tu es a la derniere ligne et que tu reussi a placer une reine)
          retourne (1);
        si (tu n'as pu placer aucune reine sur ta ligne)
          retourne (0);
    }
    dans ton main():

    tu crees un tableau de 64 ou de 8*8 (plus facile a comprendre) ou meme un tableau de 8 ou le contenu de la case indique le numero de la colonne ou est situee la reine.

    tu appelles : 8_reines(0, echiquier, 0)

    Ce n'est peut etre pas la meilleure solution, mais elle marche.
    Bonne chance !

  7. #7
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    a ta place je ferait:

    stocker la position de chaque reine dans une structure de 2 entiers pos{int x, int y}
    ou x et y representent les lignes//colonnes.
    tu declare un tableau de struct de 8 elements - 1 position par reine.
    ensuite, tu n'as plus qu'a jouer avec tes boucles pour tester si 2 reines sont sur la meme ligne ou la meme colonne (if reine[i].x == reine[j].x alors les reines i et j sont sur la meme ligne)
    pour la diagonale, il faut un peu reflechir ...

  8. #8
    Membre confirmé Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Par défaut
    Pour des explications sur le recursif tu peux aller voir ici

    il y a ton probleme en exemple

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Par défaut
    merci a tout le monde pour ces reponses

Discussions similaires

  1. De l'itératif au récursif
    Par EnigmaClub dans le forum Général Java
    Réponses: 8
    Dernier message: 28/05/2013, 10h25
  2. XML/XSL parcours itératif et récursif
    Par greIn dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 07/11/2012, 00h04
  3. [PHP 5.3] Transformer algorithme récursif en itératif
    Par Bakura dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2010, 19h16
  4. Règles de passage de l'itératif au récursif
    Par HASALGO dans le forum Langage
    Réponses: 14
    Dernier message: 20/02/2010, 09h12
  5. transformer un code itératif en récursif
    Par FstDsi dans le forum Débuter
    Réponses: 28
    Dernier message: 17/10/2009, 10h32

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