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 :

probleme avec la fonctions recursive


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Par défaut probleme avec la fonctions recursive
    Bonjour a Tous,
    dans le cadre d'un projet de programmation d'un jeu d'othello j'utilise l'algorithme
    alpha-beta.
    En resumé j'ai :
    1/ une fonction qui invite l'ordinateur
    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
    .   int inviter_ordinateur(liste d'arguments)
    .        {
    .          ...
    .          nb_coup_possible = coup_possible(liste d'arguments);
    .          for( i = 0; i < nb_coup_possible; i++)
    .             {
    .                 coup = tab_coup[i];
    .                 ...
    .                 for(prof = 1;  ; prof++)  /*approfondissement iteratif */
    .                     {
    .                       ...
    .                       score = alphabeta(prof, &coup, plateau, ...)
    .                       ...
    .                      }
    .                     ...
    .               }
    .             ...
    .        }
    2/
    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
     int alphabeta(int prof,int  *coup, int plateau[], ...)
    .   {
    .       ...
    .       nb_pions_retournés = maj_damier(...);
    .        nbr_coup_possible = coup_possible(liste d'arguments);
    .       ...
    .       if(nb_pions[BLANC] +nb_pions[NOIR]=64 || prof <= 0)
    .          return eval(...);
    .       ...
    .       for(i = 0;i<nbr_coup_possible)
    .          {
    .               ...
    .               score = - alphabeta(prof - 1 , &coup, plateau , ... - alpha , - beta);
    .               ...
    .           }
    .       ...
    .   }
    .
    En fait mon probleme est que :
    jusqu'a return eval tout va bien mais apres, au lieu de revenir directement vers
    la fontion inviter_ordinateur(...), il continue dans alphabeta(..) comme si la fonction
    appelante est alphabeta et non inviter_ordinateur.
    si quelqu'un(e) peut m'expliquer pourquoi et comment faire pour que le retour se fasse
    directement vers la fonction appelante.
    je vous remercie amplement a l'avance.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Le retour de la fonction se fait là où l'appelant l'a invoqué. Ainsi, le premier appel dans inviter_ordinateur retournera dans inviter_ordinateur. Mais si dans le déroulement de alphabeta tu repasses dans alphabeta alors le second retour se fait dans alphabeta et ainsi de suite car ta fonction est récursive. Si tu ne sorts pas par return eval(), c'est que la condition dans le if n'est pas remplie.
    Enfin, tes boucles 'for' ne possèdent pas de condition de sortie (dans inviter_ordinateur) ou d'itération (dans alphabeta): est-ce par simplicité dans ta retranscription?

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Condition sur le if erronée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           if(nb_pions[BLANC] +nb_pions[NOIR]==64 || prof <= 0)
              return eval(...);

Discussions similaires

  1. [C#] probleme avec une fonction recursive
    Par K_!!! dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/08/2006, 18h22
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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