First call: ABCDEF > 1, so return a recursive call with the first character appended to the end. Which at this point is some undetermined string + A.
Second call: BCDEF > 1, so return a recursive call with the first character appended to the end. Which at this point is some undetermined string + B.
Third call: CDEF > 1, so return a recursive call with the first character appended to the end. Which at this point is some undetermined string + C.
Fourth call: DEF > 1, so return a recursive call with the first character appended to the end. Which at this point is some undetermined string + D.
Fifth call: EF > 1, so return a recursive call with the first character appended to the end. Which at this point is some undetermined string + E.
Sixth call: F = 1, so return F.
This is the turning point where the unknown strings are now known and the recursion starts to unwind.
The string F is returned to the fifth call, which appends E, resulting in FE.
FE is returned to the fourth call, which appends D, resulting in FED.
FED is returned to the third call, which appends C, resulting in FEDC.
FEDC is returned to the second call, which appends B, resulting in FDECB.
FDECB is returned to the first call, which appends A, and finally exits the recursive method returning FEDCBA to where the method was first called.
It is important to note that a recursive method stacks up all of the calls until the return is hit where the method does not call itself again. In this example, when the string was one character long the string F was the first real return value. All other calls were in memory waiting on that F to work it's way back to the start. The first call can not return until the second call does. The second call can not return until the third call does. So on and so on until there is no memory left or the method finally returns a value rather than calling itself again.