# GCD - is this solution iterative?

Using the property that GCD(a, b) = GCD(b, r) where r is the remainder when you compute (a / b), you can write a recursive function as follows:

(define (gcd a b)
; recursive
(if (= 0 b) a
(gcd b (remainder a b))))


I also tried to write the following as an iterative function, but it still looks very similar to the recursive solution to my eye. Is this a correct, iterative solution?

(define (i-gcd a b)
; is this iterative?
(i-gcd-iter (remainder a b) b))

(define (i-gcd-iter acc b)
(if (= 0 b) acc
(gcd b (remainder acc b))))


EDIT: It appears that the first solution was actually iterative, and in fact very similar to the solution written in SICP (http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html). What would a recursive solution to this problem look like?

One small suggestion: you can use (zero? b) instead of (= 0 b).
• @Michael: In Scheme, tail recursion is treated as iteration (and indeed, in Scheme, that's the only way to do iteration; there is no goto facility). Therefore, Schemers treat tail recursion ("iteration") as a separate concept from non-tail recursion ("recursion"). – Chris Jester-Young Mar 29 '11 at 14:15