再帰呼び出しとユークリッドの互除法を使って二つの正の整数a,bの最大公約数を求めるコードを作成したいです。
ユークリッドの互除法
- a÷bの剰余をcとする
- c=0ならば、最大公約数はbとなる(再帰打ち切り)
- そうでなければ、func(b,c)が最大公約数となる(再帰呼び出し)
しかし以下のコードだと最大公約数が0だと表示されてしまいます。
なぜなのかを教えていただきたいです。
c
1int func(int a, int b) { 2 int c,ans; 3 c=a%b; 4 if (c==0) { 5 ans=b; 6 return ans; 7 } else { 8 func(b,c); 9 } 10} 11 12int main() { 13 int ans; 14 int a=33, b=22; 15 ans = func(a, b); 16 printf("%dと%dの最大公約数は%d", a, b, ans); 17 return 0; 18}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/30 12:58
2021/06/30 13:03
2021/06/30 13:06
2021/06/30 13:15 編集
2021/06/30 13:15
2021/06/30 13:22 編集
2021/06/30 13:23