I know this is somewhat the reverse of the issue people are having when they ask about a stack overflow issue, but if I create a function and call it as follows, I never receive any errors, and the application simply grinds up a core of my CPU until I force-quit it:
let rec recursionTest x =
recursionTest x
recursionTest 1
Of course I can change this out so it actually does something like this:
let rec recursionTest (x: uint64) =
recursionTest (x + 1UL)
recursionTest 0UL
This way I can occasionally put a breakpoint in my code and see the value of x is going up rather quickly, but it still doesn’t complain. Does F# not mind infinite recursion?
Your
recursionTestfunction is tail recursive, which means all recursive calls occurs in the ‘tail position’ i.e. as the last action in the function. This means the F# compiler does not need to allocate a new stack frame for recursive calls, so no stack overflow occurs.Tail recursion is a specific case of tail call, the tail call being to itself rather than some other function.