/* * Program to compute GCD using recursive version of Euclid's algorithm. */ #include #include int gcd(int a, int b); /* main program */ int main(void) { int a, b; printf("enter two non-negative integers, not both zero:\n"); if (scanf("%d %d", &a, &b) != 2) { printf("invalid input\n"); return EXIT_FAILURE; } if ((a < 0) || (b < 0) || ((a == 0) && (b == 0))) { printf("invalid input\n"); return EXIT_FAILURE; } /* * note use of ternary operator here to call gcd with parameters in * expected order */ printf("gcd of %d and %d is %d\n", a, b, a >= b ? gcd(a,b) : gcd(b,a)); return EXIT_SUCCESS; } /* returns gcd of a and b, assuming a >= b, a > 0, and b >= 0 */ int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a%b); } }