The last one is very interesting. Wouldn't the original arguments need to be sorted first, though? I think it only works if $a >= $b. Looking back at the original, it is the same way. The wikipedia article requires this for the modulo version (as well as the recursive version), but not for the subtraction version.
Your last one vividly illustrates how the algorithm generates successive refinements.
I also suppose that the "Golf" module, which would create 1-char Unicode aliases for a bunch of things, should include a symbol to mean "recursive call". Besides being shorter than naming the function again, you may want to do it with unnamed blocks, and &?ROUTINE is also rather verbose. ↺ perhaps?