Generating the Collatz sequence in F#
By building two implementaions of a much simpler function you can see that the function in the question is in a form that is tail recursive.

let rec recList n =
    match n with 
    | 1 -&gt; [1]
    | _ -&gt; n :: recList (n - 1)

let accList n =
    let rec loop (l,acc) =
        match l with
        |1 -&gt; acc
        |_ -&gt; let l' = l - 1 in loop(l',l::acc)
    loop (n,[]) |&gt; List.rev

[&lt;EntryPoint&gt;]
let main argv = 

    // Fails with a stack overflow!
    // printfn "%A" (recList 100000)
    printfn "%A" (accList 10000000)


The recList implementaion again demonstrates that a simple recursive function will cause the stack to explode, on my machine this happened between 10000 and 100000.

The accList version which mirrors the function in the question works with values much larger than the one that caused the recList function to fail.