c-这个递归GCD函数正确吗

  • 本文关键字:函数 GCD 递归 recursion
  • 更新时间 :
  • 英文 :


一切都能完美地为我的程序编译和运行。我不得不写一个递归的GCD函数。然而,我使用了两个函数,gcdRecursive和gcd。我可以把这个代码压缩成一个函数吗?这样我就不需要下面代码中的gcd函数了?或者我的代码是正确的吗?这两个函数都是必需的。

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);
} 

是的,它是正确的,但到目前为止它是次优的。

编辑:尝试使用这个:

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)

是一种更紧凑的形式

int getGcd(int num1, int num2)
{
    int remainder;
    if(num2 != 0)
        remainder = (num1 % num2);
    return ((num2 == 0) ? num1: getGcd(num2, remainder));
}

最新更新