• Elimination of non-tail recursion is not a thing I'd like to rely on...

  • Most compilers are smart enough to perform tail recursion optimization. Sometimes even if the function isn't tail recursive.

  • found some formula on stackoverflow (no credit due to limited space here)
    Maximum recursion depth = ((Stack size) - (Total size of stack frames in call chain up to the recursive function)) / (Stack frame size of recursive function)
    though it depends on tail recursion optimization. 8 MB stack size as usual, but tunable on OS.
    I have readed somewhere around 800 recursions on gcc and 400 in microsoft visual, but you have to check for yourself.