递归法求两个数的最大公约数。 函数接口定义: int gys(int m,int n); 其中 m 和 n 都是用户传入的参数。函数用递归法求m 和 n的最大公约数。 裁判测试程序样例: #include <stdio.h> int gys(int m,int n); int main() { int m,n; scanf("%d%d",&m,&n); printf("%d\n",gys(m,n)); return 0; } /* 请在这里填写答案 */ 输入样例: 24 16 输出样例: 8
时间: 2024-02-25 17:57:22 浏览: 63
下面是递归法求解两个数的最大公约数的C语言代码:
```c
int gys(int m, int n) {
if (n == 0) {
return m;
}
return gys(n, m % n);
}
```
这里采用了辗转相除法,即不断将两数中较大的数用较小的数取余,直到小的数为0,此时大的数就是最大公约数。递归的过程就是不断将两数中的较小的数和两数的余数作为参数传入函数本身,直到余数为0,返回最大公约数。
相关问题
递归法求两个数的最大公约数。 函数接口定义: int gys(int m,int n); 其中 m 和 n 都是用户传入的参数。函数用递归法求m 和 n的最大公约数。 #include <stdio.h> int gys(int m,int n) { } int main() { int m,n; scanf("%d%d",&m,&n); printf("%d\n",gys(m,n)); return 0; } 输入样例: 24 16 输出样例: 8
可以使用辗转相除法进行递归求解最大公约数。
具体步骤如下:
1. 若 m < n,则交换 m 和 n。
2. 若 n 等于 0,则返回 m。
3. 否则,将 m 除以 n,得到余数 r,然后递归调用 gys(n, r)。
代码实现如下:
```c
#include <stdio.h>
int gys(int m, int n) {
if (m < n) { // 保证 m >= n
int temp = m;
m = n;
n = temp;
}
if (n == 0) { // 边界条件
return m;
} else { // 递归求解
return gys(n, m % n);
}
}
int main() {
int m, n;
scanf("%d%d", &m, &n);
printf("%d\n", gys(m, n));
return 0;
}
```
输入样例:
```
24 16
```
输出样例:
```
8
```
用递归法求数组的最大值.函数接口定义:int amax
(int *arr, int n),其中arr为整型数组,n为数组长度。下面是递归实现的代码:
```c++
int amax(int *arr, int n) {
if (n == 1) {
return arr[0];
}
int max = amax(arr, n - 1);
if (max > arr[n - 1]) {
return max;
} else {
return arr[n - 1];
}
}
```
首先,当数组长度为1时,直接返回数组中唯一的元素。
否则,先递归求出前n-1个元素的最大值,然后将这个最大值与第n个元素进行比较,返回更大的那个。
注意,这里用到了三目运算符,可以简化代码。