学校の課題で、再帰関数とユークリッドの互除法を用いて10~100000までの最大公約数を求めるという問題が出て自分でプログラムを作ってみたのですが無限ループに入ったり、関数が使えてないみたいでできません。プログラムを見て頂いて、どこを改善したらいいかを教えてください。

#include <stdio.h>

/* 正整数 n, m の最大公約数を計算する */
int gcd(int n, int m) {
int res;

res = n % m;

if (res == 0)
return m;/* 最大公約数が求まった */

return gcd(m, res);/* 再帰呼び出し */
}

int main(void) {
int i,j;

for(i=10000;i>=10;i--){
for(j=10;j=10000;j++){
printf("%d to %d no saidaikouyakusuu ha %d \n", i, j, gcd(i, j));
}
}

return (0);
}

です。期限が今日の夜までで、ぎりぎりなんですがよろしくお願いします。

A 回答 (1件)

未検証


>for(j=10;j=10000;j++){
少なくとも真ん中の条件の=は誤り。それ以外に思いつくミスは特にない
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

直したらちゃんと動きました。

お礼日時:2009/05/22 11:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q最大公約数を求めるプログラム

学校の課題で明日の朝まで提出なのですが、わからないので教えてください。
二つの整数の最大公約数を求める再帰関数を定義し、最大公約数を表示するプログラムなのですが、その再帰関数が作れないのです。 どなたか教えていただけないでしょうか。モデルを書いていただけると助かります。

Aベストアンサー

手元にあるC言語によるアルゴリズム辞典には次のように書かれていました。

Euclidの互除法でx、yの最大公約数を求める。
int gcd(int x, int y) {
if (y == 0) return x;
elsereturn gcd(y, x % y);
}

この非再帰版は次のようになる。
int gcd(int x, int y) {
int t;
while (y != 0) {
t = x % y;x = y;y = t;
}
return x;
}

だそうです。
本の通りに書いただけなので正しいかは定かではないです。


人気Q&Aランキング

おすすめ情報