: GCD ( a b -- gcd)
?DUP ( -- a b b | a 0 )
IF SWAP OVER ( a b -- b a b)
MOD ( -- b [a mod b] )
RECURSE \ call itself
THEN ;
: GCD ( a b -- gcd)
BEGIN ?DUP ( -- a b b | a 0 )
WHILE SWAP OVER ( -- b a b)
MOD ( -- a [a mod b] )
REPEAT ;