使用c++,编写一个递归函数过程,求两个自然数m和n的最大公约数。
时间: 2024-12-26 10:28:41 浏览: 5
在 C++ 中,可以使用欧几里得算法(也称辗转相除法)来编写一个递归函数来计算两个自然数 m 和 n 的最大公约数 (GCD)。以下是递归版本的实现:
```cpp
#include<iostream>
// 定义递归函数计算 GCD
int gcdRecursive(int m, int n) {
if (n == 0) { // 当n为零时,m就是最大公约数
return m;
} else { // 否则,继续递归调用,传入余数和原来较小的数
return gcdRecursive(n, m % n);
}
}
int main() {
int m, n;
std::cout << "请输入两个自然数 m 和 n: ";
std::cin >> m >> n;
// 检查输入是否合法
if (m <= 0 || n <= 0) {
std::cerr << "输入的数值必须大于0.\n";
return -1;
}
// 计算并打印最大公约数
int result = gcdRecursive(m, n);
std::cout << "最大公约数(GCD)为: " << result << "\n";
return 0;
}
```
在这个程序中,`gcdRecursive` 函数不断调用自身,直到 n 变为 0,此时返回 m 即为最大公约数。递归终止条件是 n 等于 0,因为任何数除以0都是非法的。
阅读全文