Hãy giả sử tôi có một chức năng đang bò trên một mảng ...Phát hiện đệ quy vô hạn?
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 sẽ bò trên mã và cho mỗi mảng gặp đệ quy sẽ tham gia vào mảng đó và trả lại giá trị như vậy mà bạn có một căn hộ mảng.
này hoạt động cho đến khi chúng tôi có một mảng như:
a = [];
a[0] = a;
Điều này rõ ràng tạo ra đệ quy vô hạn:
Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
...
Làm thế nào tôi có thể phát hiện hành vi này mà không modifiying các mảng như vậy mà các chức năng có thể đối phó Với cái này?
Chúng tôi có thể duy trì những gì chúng tôi đã thu thập thông tin và nếu chúng tôi đã thu thập thông tin mảng đó, thì chúng tôi đang ở trong tình huống được mô tả ở trên ... –
Kiểm tra [bài đăng này] (http: // stackoverflow .com/a/9386208/989121). Về cơ bản nó cho thấy làm thế nào để viết một trang trí chức năng giới hạn chiều sâu đệ quy. – georg