一切都为我的程序编译和运行完美。我不得不写一个递归的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);
}
答案 0 :(得分: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)
答案 1 :(得分:1)
更紧凑的形式可能是
int getGcd(int num1, int num2)
{
int remainder;
if(num2 != 0)
remainder = (num1 % num2);
return ((num2 == 0) ? num1: getGcd(num2, remainder));
}