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 :

je n'arrive pas arrêter mon programme récursif


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 33
    Points : 19
    Points
    19
    Par défaut je n'arrive pas arrêter mon programme récursif
    Bonjour,
    mon programme affiche un carré a l'écran, qui se divise en 4 grâce a la récursivité, le problème est qu'il ne se divise qu'une seule fois en 4 et je voudrais que chacun de ces 4 "sous carrés" se divisent a nouveau. Mais lorsque je met une boucle for par exemple autour des 4 appels le programme plante et me dit "stack overflow" (je suis sous visual C++ 2003).
    pourriez vous m'aider ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Quand tu fais l'appel que tu donnes, tu as donc
    Or, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diviseur = diviseur * 2 ;
    donc diviseur = 2
    puis tu testes, et fais ton appel récursif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(diviseur <= 2 && diviseur != 0)
         {....
           carre(x1/diviseur, z1/diviseur, x2/diviseur, z2/diviseur, x3/diviseur, z3/diviseur, x4/diviseur, z4/diviseur, diviseur);
    avec diviseur = 2, et dans l'appel suivant, la séquence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diviseur = diviseur * 2 ;
    ==> diviseur = 4
    et donc le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(diviseur <= 2 && diviseur != 0)
    échoue, et ta récursion est arrêtée.

    Pour éviter cela, je passerais un autre paramètre : diviseur_max, et je ferais le test
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(diviseur <= diviseur_max && diviseur != 0)
    au lieu de comparer à 2 (ce qui donne une limite absolue à ta récursion)

    Pour ta boucle for, je ne vois pas où tu la met, et je ne peux donc pas té répondre autre chose que ceci: il est pratiquement sûr que cela entraîne un enchaînement infini d'appels à la fonction.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    j'ai trouvé ! merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Je n'arrive pas à exécuter mon programme
    Par osabri dans le forum Débuter
    Réponses: 6
    Dernier message: 02/03/2010, 13h50
  2. je n'arrive pas à executer mon programme
    Par alladum dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/01/2010, 13h02
  3. Je n'arrive pas à terminer mon formulaire en PHP
    Par snakejl dans le forum Langage
    Réponses: 12
    Dernier message: 10/05/2006, 22h35
  4. Réponses: 9
    Dernier message: 11/04/2006, 23h14
  5. [Compilation] Dev ne peut pas compiler mon programme
    Par Rémaill dans le forum Dev-C++
    Réponses: 9
    Dernier message: 01/11/2005, 00h41

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