Обнаружение бесконечной рекурсии?

Предположим, у меня есть функция который просматривает массив...

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]

Flatten просматривал код и для каждого встречающегося массива рекурсивно входил в этот массив и возвращал значения, так что у вас был плоский массив.

Это работает до тех пор, пока у нас не будет такого массива:

a    = [];
a[0] = a;

Очевидно, что это создает бесконечную рекурсию:

Array[1]
0: Array[1]
 0: Array[1]
  0: Array[1]
   0: Array[1]
    0: Array[1]
     0: Array[1]
      ...

Как я могу обнаружить это поведение, не изменяя массив так, чтобы функция могла с этим справиться?

7
задан Incognito 8 March 2012 в 15:17
поделиться