From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../erreurs/too_much_recursion/index.html | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 files/fr/web/javascript/reference/erreurs/too_much_recursion/index.html (limited to 'files/fr/web/javascript/reference/erreurs/too_much_recursion') diff --git a/files/fr/web/javascript/reference/erreurs/too_much_recursion/index.html b/files/fr/web/javascript/reference/erreurs/too_much_recursion/index.html new file mode 100644 index 0000000000..1e7bf8c0d0 --- /dev/null +++ b/files/fr/web/javascript/reference/erreurs/too_much_recursion/index.html @@ -0,0 +1,69 @@ +--- +title: 'InternalError: too much recursion' +slug: Web/JavaScript/Reference/Erreurs/Too_much_recursion +tags: + - Erreurs + - InternalError + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Error: Out of stack space (Edge)
+InternalError: too much recursion (Firefox)
+RangeError: Maximum call stack size exceeded (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("InternalError")}}.

+ +

Quel est le problème ?

+ +

Une fonction qui s'appelle elle-même est une fonction recursive. Lorsqu'une certaine condition est respectée, la fonction arrête de s'appeler elle-même, c'est ce qu'on appelle le cas initial.

+ +

D'une certaine façon, une récursion est semblable à une boucle. Les deux exécutent le même code plusieurs fois, et les deux ont besoin d'une condition d'arrêt afin d'éviter une boucle infinie ou une récursion infinie. Lorsqu'il y a trop de niveaux de récursion ou une récursion infinie, JavaScript lèvera cette erreur.

+ +

Exemples

+ +

Cette fonction récursive est exécutée 10 fois comme l'indique la condition de sortie :

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" is the exit condition
+    return;
+  // do stuff
+  loop(x + 1); // the recursive call
+}
+loop(0);
+ +

Si la condition d'arrêt est beaucoup trop grande, cela ne fonctionnera pas :

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // do stuff
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion
+ +

Si la fonction récursive ne possède pas de cas initial, il n'y aura pas de condition de sortie et la fonction continuera de s'appeler indéfiniment.

+ +
function boucle(x) {
+  boucle(x + 1);
+  // il n'y a pas de cas initial
+}
+
+boucle(0);
+
+ +

Voir aussi

+ + -- cgit v1.2.3-54-g00ecf