<問題>ユークリッドの互除法によって、2つの整数p, q の最大公約数を求めるプログラムを作成せよ。(ただし、p > q とする) どのような再帰呼び出しになっているか、プリント文を入れてみよう。
<実行結果> (自分がわかる出力を作ろう) p,q (p > q)を入力してください p = 512 q = 384 512と384の最大公約数を求める gcd2( 512, 384) = gcd2( 384, 128) p = 384, q = 128, r = 0 512と384の最大公約数は128である。 p,q (p > q)を入力してください p = 91 q = 77 91と77の最大公約数を求める gcd2( 91, 77) = gcd2( 77, 14) gcd2( 77, 14) = gcd2( 14, 7) p = 14, q = 7, r = 0 91と77の最大公約数は7である。
<ヒント>
解答例 #include <stdio.h> int gcd2(int, int ); int main (void) { int p, q; printf("p,q (p > q)を入力してください \n"); printf("p = "); scanf("%d", &p); printf("q = "); scanf("%d", &q); printf("\n%dと%dの最大公約数を求める\n", p, q); printf("%dと%dの最大公約数は%dである。\n",p, q, gcd2(p,q)); return 0; } int gcd2(int p, int q) { /* 適当なprintf文を入れてみよう */ int r = p%q; if (r ==0) { printf("p = %4d, q = %4d, r = %4d \n", p, q, r); return q ; } else { printf("gcd2(%4d, %4d) = gcd2(%4d, %4d)\n", p, q, q, r); return gcd2(q, r); } }