Investigating on the subject. I found that stack size is 1Mb for main thread.
Also, by cheking parameters address on the stack crawl on crash, I can see that the stack size is exhausted.
This is the point I don't get. The recursion is coded by a block. To avoid the retain cycle, two block variables are declared, one is weak and retained from the block. (see http://stackoverflow.com/questions/14839571/block-recursion-and-breaking-retain-cycle/26658513#26658513)
So the question becomes : is the block copied on the stack on each recursive call ? On else what could cause such a stack bloating on block call ?
Still no clues as why it's running ok on some devices. The 32/64 bits should not play, all local variables are fixed sizes.
Edit: After more investigations, I slimed down local variables in the block to a bare minimum. Nevertheless, it turns out that block invocation push about 90 bytes on the stack, beside parameter or return value. Also this is a minimum since, depending of the way the block is declared this might be more. All in all I'm not able to recurse more than 9k deep and this does not meet the requirement for the algoritm.
So it turns out I have to change to a non recursive algo, which is significantly slower.
Why was it working before, and still is on some devices/iOS, is still unknown.