-2

私のプログラムでは、すべてが完全にコンパイルされ、実行されます。再帰的な GCD 関数を書かなければなりませんでした。ただし、gcdRecursive と gcd の 2 つの関数を使用しました。以下のコード内で gcd 関数が不要になるように、このコードを 1 つの関数に要約できますか? または、私のコードはそのままで、2つの関数が両方とも必要です。

void gcdRecursive(int *x, int *y, int i){
  if (i >= 1) {
    if (*x % i == 0 && *y % i == 0) {
        printf("The GCD of %d and %d is %d", *x, *y, i); 
    } 
    else {
        gcdRecursive(x, y, i - 1);
    }
  }
}
void gcd(int *x, int *y){
  getValuesForGCD(x, y);
  gcdRecursive(x, y, *x);
} 
4

2 に答える 2

3

はい、それは正しいですが、最適ではありません。

編集:これを使用してみてください:

if (x > y) 
  gcd(x,y) = gcd(y, x);
if (y % x == 0)
  gcd(x, y) = x;
else 
  gcd(x, y) = gcd(x, y%x)
于 2013-02-15T16:05:51.660 に答える
1

よりコンパクトなフォームは

int getGcd(int num1, int num2)
{
    int remainder;

    if(num2 != 0)
        remainder = (num1 % num2);
    return ((num2 == 0) ? num1: getGcd(num2, remainder));
}
于 2013-02-15T16:50:08.863 に答える