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

JavaScript Discussion :

Récursivité et dépassement de pile...


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut Récursivité et dépassement de pile...
    Bonjour,

    J'ai un peu de mal à trouver des infos là dessus, alors je m'en remets à vous...

    j'ai une fonction récursive qui me parcours un tableau un peu dans tous les sens.
    pour l'instant, je ne poste pas le code car l'algo me semble correcte.

    Le tableau à parcourir est déclaré en tant que variable globale (et n'apparait pas dans la liste des paramètres de la fonction) histoire d'éviter les recopies.

    Firefox me sors : too much recursion
    Opera me sors : ECMAScript interpreter stack overflow

    je ne pense pas que mon tableau soit recopié à chaque appel alors je me dis que javascript est limité en nombre "d'appels en attente"

    le tableau à parcourir fait 7 par 7 et pour chaque élement je regarde dans 4 directions au maximum...
    le test qui me pose problème ne doit provoquer que 8 appels...

    En gros, je ne sais pas trop quoi en penser...
    Connaissez vous les restrictions liées aux appels récursifs?
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ça ne m'est jamais arrivé, mais c'est sans doute parceque je n'ai jamais eu de trop grandes boucles à faire ...
    j'ai déja eu des message du genre un script ralentit ....
    essaye d'intercaller des setTimeout de façon à lui laisser le temps de respirer ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre chevronné Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Par défaut
    A première vue il existe bien une limitation et malheureusement tu dois l'atteindre : http://w3log.server-wg.de/000055.html

  4. #4
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    je pense que 'le laisser respirer' fera qu'il mettra plus de temps àme jeter non?
    par contre, je vais revoir l'algo (que je pensais bon) car pour l'instant je table sur 8 passages dans ma fonction...

    Donc ce serait dommage...
    Merci de vos réponses
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  5. #5
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Il faudra alors repenser à la facon de faire ton script.
    Sur ce point, je dois t'avouer ne pas comprendre quelque chose.

    Tu as un tableau de 7x7 (soit 49 cases)
    Pour chaques cases, tu dois vérifier celle qui sont adjacente

    Exemple d'utilisation: un jeu avec un perso qui se promène sur un terrain, il ne peux pas marcher dans l'eau.

    Dans le cas d'un jeu, il suffit de vérifier au déplacement si le déplacement demandé est possible. Dans ton cas tu dois vérifier tout les "déplacements" possible avant.

    Donc, tu fais une double boucle pour passer tout les champs du tableau:
    for (i=0;i<7;i++)
    for (ii=0;ii<7;ii++)

    et pour chaque cases, tu vérifie les 4 (ou 8 si les diagonales comptes) qui sont adjacente. (Ne pas oublier de s'assurer qu'il existe une case adjacente. la case supérieure à la 1:5 existe pas par exemple)


    Tout ceci pour en venir au fait que je ne vois aucune récursivité jusqu'ici. J'ai mal compris ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je pense que 'le laisser respirer' fera qu'il mettra plus de temps àme jeter non?
    si c'est le principe de la baignoire percée que l'on remplit, tout dépend de si le debit de remplissage est plus important que celui ai fuite ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Le problème donné en exemple (le lien externe) c'est un peu différent du principe de la baignoire... Pour le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function test(){
       return test();
    }

    Le navigateur, même s'il respire et prend une pause après le 500ieme appel doit quand même garder les valeur de chaque fonction car chaque fonction demande de faire un retour de la valeur dela fonction suivante.

    Donc tant qu'il ne cesse pas d'y avoir des appels une fonction, aucun "return" ne se fera car chaqu'un dépend du suivant.

    Dans un tel cas, la pause est innutile je crois :-\

  8. #8
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    bon, comme je vois que j'ai suscité la curiosité de certains, je m'explique un peu mieux sur le pourquoi du comment...

    pour ceux qui connaissent, j'essaie de refaire le jeu naturalchimie...
    pour ceux qui connaissent pas et qui veulent savoir: http://www.naturalchimie.com

    j'appelle une piece l'ensemble des elements de meme valeur adjacent (pas de diagonale)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    0000000000
    0000000000
    1000000000
    1110000001
    les deux "zones de 1" dans les coins en bas sont deux pieces distinctes
    A partir du tableau représenté ci dessus,
    je regarde chaque élément dans les quatre directions autorisées et si c'est la meme valeur alors, j'ajoute les coordonnées à un objet piece (c'est la que se trouve la récursivité)
    Les éléments déjà parcourus sont mis à zero avant de continuer l'exploration afin de ne pas repasser plusieurs fois dessus.
    Je pense que même si j'oubliais cette étape, j'aurais des résultats faux mais pas un bouclage infini
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  9. #9
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Citation Envoyé par MasterOfChakhaL
    [...] et si c'est la meme valeur alors, j'ajoute les coordonnées à un objet piece (c'est la que se trouve la récursivité)
    Comprend pas ce bout. (en plus, il parrait que c'est celui qui pose problème)

  10. #10
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par MasterOfChakhaL
    Firefox me sors : too much recursion
    Opera me sors : ECMAScript interpreter stack overflow
    Généralement, c'est à cause d'une récursion infinie, surtout si tu n'as prévu que 8 passages dans la fonction.

    On peux voir le fameux algorithme?

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

Discussions similaires

  1. Dépassement de pile. Mais quelle est sa taille ?
    Par Flodelarab dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 30/12/2008, 19h03
  2. Eviter les dépassements de pile
    Par bruce-willis dans le forum C++
    Réponses: 26
    Dernier message: 23/12/2008, 13h07
  3. Réponses: 0
    Dernier message: 02/11/2008, 09h05
  4. Dépassement de pile et Application.ProcessMessages
    Par Bruno13 dans le forum Delphi
    Réponses: 3
    Dernier message: 20/03/2007, 10h35
  5. [D7] Dépassement de pile à l'impression avec Quick Report
    Par Bigbaloo dans le forum Composants VCL
    Réponses: 8
    Dernier message: 16/03/2005, 00h28

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