Greatest Common Divisor in Several Languages
Recursive
def gcd(a, b): if b == 0: return abs(a) else: return gcd(b, a % b)
int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
(define (gcd a b) (if (= b 0) a (gcd b (modulo a b))))
(defun gcd1 (a b) (if (zerop b) a (gcd1 b (mod a b))))
Iterative
def gcd_iter(a, b): while b: a, b = b, a % b return abs(a)
int gcd(int a, int b) { if (b) while ((a %= b) && (b %= a)); return (a + b); }
(define (gcd a b) (let loop ((x a) (y b)) (if (zero? y) x (loop y (mod x y)))))
(defun gcd (a b) (iter (for x = a then y) (for y = b then (mod x y)) (until (zerop y)) (finally (return x))))