ユークリッド互叙法の関数Gcd(x,y)を再定義をせずに自作関数で作りたいのですが、ご教授いただけないでしょうか。

gcd[x_, y_] := ({x0 = x, y0 = y};
While[y0 > 0, gcd[x0, y0] = gcd[y0, Mod[x0, y0]]]; Return[x0])

こういう雰囲気でいけないかなと試行錯誤してます。