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

Reply via email to