用递归算法写一段求正整数最小公约数的代码
时间: 2024-10-13 13:16:27 浏览: 33
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
当然,你可以使用欧几里得算法(也称为辗转相除法)来编写一个递归函数来计算两个正整数的最大公约数(GCD),然后利用这个基础步骤来找到任意多个数字的最大公约数。这是递归版本的代码:
```c
#include <stdio.h>
// 递归函数,计算两个数的最大公约数
int gcd(int a, int b) {
if (b == 0)
return a; // 如果b为0,则a就是最大公约数
else
return gcd(b, a % b); // 递归调用gcd,将b和a除以b的余数作为新的参数
}
// 计算三个或更多正整数的最大公约数
int gcd_multiple(int arr[], int n) {
int result = arr[0];
for (int i = 1; i < n; i++) {
result = gcd(result, arr[i]);
}
return result;
}
int main() {
int numbers[] = {24, 36, 48}; // 示例数组
int num_elements = sizeof(numbers) / sizeof(numbers[0]);
int lcm = numbers[0] * (gcd_multiple(numbers, num_elements - 1) / gcd(numbers[0], gcd_multiple(numbers + 1, num_elements - 2)));
printf("Numbers: %d, %d, %d\n", numbers[0], numbers[1], numbers[2]);
printf("GCD of all numbers: %d\n", gcd_multiple(numbers, num_elements));
printf("LCM (Least Common Multiple): %d\n", lcm);
return 0;
}
```
这段代码首先定义了一个`gcd`函数来处理两个数的情况,然后在`gcd_multiple`函数中应用了递归来处理多个数。`main`函数中展示了如何计算一组数字的GCD和LCM(最小公倍数)。需要注意的是,这里并没有直接递归地计算所有数字的最大公约数,而是先计算前两数的GCD,再与下一个数比较。
阅读全文