C语言求最大公约数的程序,递归与循环两种写法
递归方法求最大公约数(辗转相除法)
c
include
// 递归方式求最大公约数
int gcd_recursive(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd_recursive(b, a % b);
}
}
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
printf("这两个数的最大公约数是:%d", gcd_recursive(num1, num2));
return 0;
}
在这个程序中,`gcd_recursive`函数接收两个整数作为参数,如果`b`为0,那么`a`就是最大公约数,否则,它会递归地调用自身,将`b`和`a`除以`b`的余数作为新的参数。
循环方法求最大公约数(辗转相除法)
c
include
// 循环方式求最大公约数
int gcd_iterative(int a, int b) {
int temp;
while (b != 0) {
temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
printf("这两个数的最大公约数是:%d", gcd_iterative(num1, num2));
return 0;
}
在这个程序中,`gcd_iterative`函数接收两个整数作为参数,然后在循环中,将`b`设置为`a`除以`b`的余数,`a`设置为原来的`b`,直到`b`为0。`a`就是最大公约数。
以上两种方法都是基于辗转相除法,也称为欧几里得算法,是求两个数最大公约数的常用方法。
