One of the recursive calls is tail-recursive and the other is not. Quickersort does the tail-recursive call on whichever part is larger, leaving the non-tail-recursive call to work on the one that is smaller. Since the smaller section is always less than half the total, the number of simulataneously running calls to Quickersort cannot be more than about log2(n).

The tail-recursive call is replaced by a loop (a goto back to the beginning of the function, with parameter values changed).