Let's see how it performs on a structure that is naturally recursive:
; Binary tree
left: 1
node: 2
right: 3
insert: func [tree item][
any [
all [tree = [] reduce [[] item []]]
all [
item < tree/:node reduce
[insert tree/:left item tree/:node tree/:right]
]
reduce [tree/:left tree/:node insert tree/:right item]
]
]
>> tree: []
>> for n 1 140 1 [tree: insert tree n]
Invalid data type during recycle
** Press enter to quit.
Ooops, fails when tree gets about 140 levels deep.
But:
>> tree: []
>> for n 1 20000 1 [tree: insert tree random 100000]
== [[[[[[[[[[[[[[] 2 [[] 4 []]] 20 []] 35 [[[] 50 [[] 51 []]] 65 []]] 66
[[[[[] 72 [[] 81 []]] 82 []] 95 [[] 97 []]] 99 [[] 100 []]...
So as long as you keep them balanced it can handle quite a lot!
140 levels can hold maximum 2^139 + 2^138 + ... + 2^0 elements...
I think running out of memory is a bigger problem than running out of
stack space ! :))
Gisle