supongamos que tengo una función que se arrastra sobre una gran variedad ...¿Detecta recursión infinita?
flatten([a, b, c, d, [e, f, g, [h, i, j, k], l], m, n, o, p])
>> [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p]
Aplanar se arrastraría sobre el código y para cada matriz se encuentran de forma recursiva entrar en esa matriz y devolver los valores tales que usted tiene un piso formación.
Esto funciona hasta que tengamos una matriz tales como:
a = [];
a[0] = a;
Obviamente, esto crea una recursión infinita:
Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
...
¿Cómo puedo detectar este comportamiento sin modifiying la matriz de modo que la función se puede tratar ¿con este?
¿Podemos mantener lo que hemos rastreado, y si ya hemos rastreado esa matriz, entonces estamos en la situación descrita anteriormente ... –
Mira [esta publicación] (http: // stackoverflow .com/a/9386208/989121). Básicamente muestra cómo escribir un decorador de función que limita la profundidad de recursión. – georg