Page 1
Introduction to Computer Science • Robert Sedgewick and Kevin Wayne • Copyright © 2006 • http://www.cs.Princeton.EDU/IntroCS
Recursive GCD Demo
public class Euclid { public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
public static void main(String[] args) { int p = Integer.parseInt(args[0]); int q = Integer.parseInt(args[1]); System.out.println(gcd(p, q)); }}
Page 2
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)p = 1272, q = 216
environment
Page 3
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)p = 1272, q = 216
environment
Page 4
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)p = 1272, q = 216
environment
Page 5
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)p = 216, q = 192environment
p = 1272, q = 216environment
1272 = 216 5 + 192
Page 6
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)p = 1272, q = 216
environment
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)p = 216, q = 192environment
Page 7
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)p = 1272, q = 216
environment
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)p = 216, q = 192environment
Page 8
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 9
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 10
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 11
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(24, 0)p = 24, q = 0environment
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 12
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(24, 0)p = 24, q = 0environment
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 13
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(24, 0)p = 24, q = 0environment
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
24
Page 14
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)environment
24
p = 192, q = 24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 15
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(192, 24)p = 192, q = 24environment
24
p = 216, q = 192environment
p = 1272, q = 216environment
24
Page 16
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)
24
p = 216, q = 192environment
p = 1272, q = 216environment
Page 17
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(216, 192)p = 216, q = 192environment
24
p = 1272, q = 216environment
24
Page 18
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)
24
p = 1272, q = 216environment
Page 19
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd(1272, 216)p = 1272, q = 216
environment
24
public class Euclid { public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
public static void main(String[] args) { int p = Integer.parseInt(args[0]); int q = Integer.parseInt(args[1]); System.out.println(gcd(p, q)); }}
24
24
% java Euclid 1272 21624