2013-06-02 7 views
1

J'ai écrit un script de blackjack que je voudrais récursivement récursivement jusqu'à ce qu'un bankroll assez grand s'épuise. Je voudrais faire des analyses sur la télémétrie. Il est un script qui vit localement et ne pose aucun danger pour quoi que ce soit, mais l'environnement du navigateur que je suis en train de courir dans.call stack increase javascript

Essentiellement, le script est supposé récursive jusqu'à ce que l'argent va. Cela fonctionne bien jusqu'à environ 5k mains séparées ou plus - pour des bankrolls jusqu'à 10k, et puis il jette l'erreur de pile d'appel max. Cependant, j'ai besoin de beaucoup plus de données; comme> 100k mains.

J'ai cherché SO pour des solutions et je rassemble c'est une chose spécifique au navigateur. Toutes les pensées seraient très appréciées!

extrait de code attaché:

function main() { 
init(); 
if (bankRoll >= initialBet) { 
    determineBet(); 
} 
else { 
    alert("Not enough moneyz to play!"); 
    console.log("telemetry"); 
    exitFunction(); 
} 
bankRoll -= initialBet; 
playTheGame(); // the whole game, betting, receiving cards, strategy etc 
} 
+0

Faut-il être récursif? Peut-être que vous pouvez le réécrire pour utiliser une pile à la place. –

+0

Pouvez-vous poster un extrait de code qui a une logique récursive? – Vadim

+0

@FelixKling Belle idée; Je ne sais pas exactement comment faire cela car je viens de commencer la programmation la semaine dernière. J'ai d'abord écrit le jeu puis j'ai décidé de l'utiliser pour tester la stratégie basique de bj. – MerynDH

Répondre

1

Je vous suggère d'utiliser une boucle:

function main() { 
    init(); 
    while (bankRoll >= initialBet) { 
     determineBet(); 
     bankRoll -= initialBet; 
     playTheGame(); // the whole game, betting, receiving cards, strategy etc 
    } 
    alert("Not enough moneyz to play!"); 
    console.log("telemetry"); 
    exitFunction(); 
} 

Il est difficile de dire si je refactorisé correctement puisque je ne sais pas quelles fonctions comme playTheGame ou determineBet fais, mais j'espère que tu as l'idée.

+0

Ceci renvoie la même erreur à peu près au même niveau de la main (> 5k). La fonction playTheGame() contient l'essentiel des fonctions, ce qui n'est pas * compliqué, mais je pense que j'ai probablement beaucoup à apprendre sur le codage efficace. – MerynDH

+0

Eh bien, où et quand la fonction 'main' est-elle appelée? – basilikum

+0

Il est appelé dans l'élément de script html et dans la fonction qui régit le redémarrage du jeu après la fin d'une main. Cette fonction est appelée à son tour par les fonctions d'évaluation qui déterminent le résultat. – MerynDH