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`就是最大公约数。

以上两种方法都是基于辗转相除法,也称为欧几里得算法,是求两个数最大公约数的常用方法。