From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/errors/too_much_recursion/index.html | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 files/pt-br/web/javascript/reference/errors/too_much_recursion/index.html (limited to 'files/pt-br/web/javascript/reference/errors/too_much_recursion') diff --git a/files/pt-br/web/javascript/reference/errors/too_much_recursion/index.html b/files/pt-br/web/javascript/reference/errors/too_much_recursion/index.html new file mode 100644 index 0000000000..26637da662 --- /dev/null +++ b/files/pt-br/web/javascript/reference/errors/too_much_recursion/index.html @@ -0,0 +1,66 @@ +--- +title: 'InternalError: too much recursion' +slug: Web/JavaScript/Reference/Errors/Too_much_recursion +translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +--- +
{{jsSidebar("Errors")}}
+ +

Mensagem

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

Tipo de erro

+ +

{{jsxref("InternalError")}}.

+ +

O que deu errado?

+ +

Uma função que invoca a si mesma é chamada função recursiva. Assim que uma condição é atendida, a função para de se invocar. 

+ +

De certa forma, recursão é análoga a um loop. Ambos executam o mesmo código múltiplas vezes, e ambos exigem uma condição (para evitar um loop infinito ou, nesse caso, uma recursão infinita). Quando são feitas excessivas invocações, ou a função não possui uma condição para interromper a recursividade, este erro é lançado.

+ +

Exemplos

+ +

Esta função recursiva roda 10 vezes, como definido pela condição de saída.

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" é a condição de saída
+    return;
+
+  loop(x + 1); // o código recursivo em si
+}
+loop(0);
+ +

Mudar esta condição para um valor extremamente alto não vai funcionar:

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

A seguinte função recursiva não possui condição de saída. Assim, ela vai continuar se invocando indefinidamente (até que o erro seja lançado e a execução interrom).

+ +
function loop(x) {
+ // Não há condição de saída
+
+loop(x + 1); // Código recursivo
+}
+
+loop(0);
+
+// InternalError: too much recursion
+ +

Veja também

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