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))))