Implementation of Euclidean algorithm
I believe this is as efficient as it gets, save for quickly detecting edge cases (a == 0 or a == b), which I think would be negligible anyway.

Recursion wouldn't be more efficient than iterative version. Functional languages can optimize recursion to the point where there's no difference, but I don't think Java excels at that and there's a performance penalty of adding new frames to the stack.

Recursion can make code clearer and more readable sometimes, but that's another story.

As a side note:

public EuclideanAlgorithm() {}; //Suppress default constructor


What's the purpose of this "suppression"?