: 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 ;