#include void gcdRec(int a, int b, int* d, int* x, int* y) { if (b == 0) { *d = a; *x = 1; *y = 0; } else { int x1, y1; gcdRec(b, a % b, d, &x1, &y1); *x = y1; *y = x1 - (a / b) * y1; } } void gcdIter(int a, int b, int* d, int* x, int* y) { int x1, y1, tmp; *x = 1; *y = 0; x1 = 0; y1 = 1; while (b) { int q = a / b; tmp = b; b = a - q * b; a = tmp; tmp = *x; *x = x1 - q * *x; x1 = tmp; tmp = *y; *y = y1 - q * *y; y1 = tmp; printf("a %d b %d x %d y %d x1 %d y1 %d\n", a, b, *x, *y, x1, y1); } *d = a; *x = y1; *y = x1; } int main(void) { int a, b, d1, x1, y1, d2, x2, y2; scanf("%d %d", &a, &b); gcdRec(a, b, &d1, &x1, &y1); gcdIter(a, b, &d2, &x2, &y2); printf("Recursive: %d = %d * %d + %d * %d\n", d1, a, x1, b, y1); printf("Iterative: %d = %d * %d + %d * %d\n", d2, a, x2, b, y2); }