Experimenting with tail call optimisation in C++, C# and F#