J'ai posé une question il y a quelques semaines sur l'utilisation de setTimeout pour une fonction factorielle, mais c'était malheureusement avec un compte non enregistré et je n'ai jamais eu de réponse complète.Comment écrire une fonction factorielle en Javascript en utilisant setTimeout ou setInterval
Mon problème principal est que je voudrais écrire une fonction qui calcule la factorielle d'un nombre mais utilise les commandes setTimeout ou setInterval. L'impulsion derrière ceci est de réinitialiser un compteur que l'IE utilise afin d'éviter un avertissement de script de longue durée. À l'heure actuelle, la fonction factoriel j'est:
Dans mon autre postfunction factorial(n) {
return 0 === n || 1 === n ? 1 : n * factorial(n - 1)
}
, jsumners a eu la gentillesse de me fournir le code qui a essayé d'utiliser setTimeout périodiquement lors du calcul factoriel:
function factorial(x) {
executions++;
if (x > 1) {
if (executions % 20 === 0) {
return (function() {
var y = x;
setTimeout(function(y) { return y*factorial(y-1); }, 1);
});
} else {
return x*factorial(x-1);
}
} else {
executions = 0;
return 1;
}
}
Dans le Au-dessus du code, il devrait théoriquement utiliser la commande setTimeout pour effectuer la prochaine multiplication lorsque le nombre d'exécutions écoulées est un facteur de 20 (mod 20). Malheureusement, le code ne fonctionne pas, et ce qui se passe est que si vous essayez de calculer la factorielle d'un nombre supérieur à 20, alors le résultat est NaN. Si le nombre est inférieur à 20, alors la réponse est correcte.
Est-ce que quelqu'un connaît une solution à ceci ou un autre moyen de calculer un factoriel en utilisant les commandes setTimeout ou setInterval?
Merci!
Merci pour briser le code pour moi et me faire savoir quel était le problème. Cela dit, je devrais dire que je suis un amateur de Javascript, donc je ne sais pas trop comment mettre en place un rappel comme vous l'avez suggéré. Est-ce que je me débarrasse de la syntaxe 'return' et que j'ai simplement la commande setTimeout, et une fois que le multiplicateur descend à 1, j'appelle un callback qui renvoie la réponse? Merci encore pour votre aide. – Josiah