分别用迭代递归实现求最大公约数 c++
时间: 2023-11-11 19:07:02 浏览: 64
迭代实现:
```cpp
int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
```
递归实现:
```cpp
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
```
两者的时间复杂度都是 $O(\log\min(a, b))$,但是迭代实现可能更快一些,因为没有递归带来的额外开销。
相关问题
c++用递归法求最大公约数
最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数共有的约数中最大的一个数。
使用递归法求最大公约数的思路如下:
1. 首先,判断两个整数a和b的大小,如果a小于b,则交换它们的位置,确保a大于等于b。
2. 然后,判断b是否为0,如果是,则a即为最大公约数。
3. 如果b不为0,则将a除以b的余数记为r,再将b和r作为新的一对数进行下一轮迭代。
4. 重复以上步骤,直到b为0,此时a即为最大公约数。
下面是一个使用递归法求最大公约数的示例代码:
```
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
result = gcd(a, b)
print("最大公约数为:", result)
```
通过递归的方式,不断地将b和a%b作为新的一对数进行迭代,直到b为0,此时a即为最大公约数。这种方法遵循的是欧几里得算法,也称为辗转相除法,是求解最大公约数的一种常用方法。
怎么用递归函数求最小公倍数 c++
在C++中,使用递归函数来求两个数的最小公倍数(LCM)通常不是最佳实践,因为递归操作对于这种计算来说效率较低,而且递归深度可能会很大,导致栈溢出。不过,为了教学目的,我们可以展示一个简单的递归实现。但实际生产环境中,更推荐使用迭代或欧几里得算法(辗转相除法)。
下面是递归实现最小公倍数的一个示例,它基于以下原理:两个数的最小公倍数等于较大数和它们的最大公约数(GCD)的乘积:
```cpp
#include <iostream>
using namespace std;
// 递归求最大公约数
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
// 递归求最小公倍数
int lcm(int a, int b) {
return a * (b / gcd(a, b)); // 根据公式:LCM(a, b) = |a * b| / GCD(a, b)
}
// 主函数示例
int main() {
int num1, num2;
cout << "Enter two numbers: ";
cin >> num1 >> num2;
int result = lcm(num1, num2);
cout << "The least common multiple of " << num1 << " and " << num2 << " is: " << result << endl;
return 0;
}
```
阅读全文