C语言设计一个递归算法求两个正整数x、y的最大公约数(gcd),并转换为非递归算法。
时间: 2024-10-29 12:14:39 浏览: 40
用递归算法实现两个整数最大公约数的计算
3星 · 编辑精心推荐
在C语言中,可以使用欧几里得算法(Euclidean algorithm)来设计递归算法求两个正整数x和y的最大公约数(GCD)。递归版本的代码如下:
```c
// 递归函数计算GCD
int gcd_recursive(int x, int y) {
if (y == 0)
return x;
else
return gcd_recursive(y, x % y);
}
```
非递归版本(迭代)的代码更直观,避免了函数调用栈过深的问题,如下所示:
```c
// 非递归函数计算GCD
int gcd_iterative(int x, int y) {
while (y != 0) {
int temp = x % y; // 更新临时变量
x = y; // 新的除数成为旧的余数
y = temp; // 新的余数成为旧的除数
}
return x;
}
```
在这段代码中,`temp`用于保存每次循环后的余数,直到`y`变为0,说明`x`就是最大公约数。
阅读全文