【约数】求最大公约数——递归
请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。
G
C
D
(
n
,
m
)
=
{
=
m
,
当
m
<
=
n
且
n
m
o
d
m
=
0
=
G
C
D
(
m
,
n
)
,
当
n
<
m
时
=
G
C
D
(
m
,
n
m
o
d
m
)
,
其他
GCD(n,m)=\left\{\begin{matrix} =m,当 m<=n 且 n mod m =0\\ =GCD(m,n),当n<m时\\ =GCD(m,n \mod m),其他 \end{matrix}\right.
GCD(n,m)=⎩
⎨
⎧=m,当m<=n且nmodm=0=GCD(m,n),当n<m时=GCD(m,nmodm),其他
输入:
n m
输出:
n和m的最大公约数
样例:
序号 | 测试输入 | 期待的输出 | 额外进程 |
---|---|---|---|
1 | 24 48↵ | 24↵ | 0 |
2 | 13 15↵ | 1↵ | 0 |
思路
怎么说呢,其实只要理解了什么是递归,这道题就是把题目抄一遍
即
G
C
D
(
n
,
m
)
=
{
=
m
,
当
m
<
=
n
且
n
m
o
d
m
=
0
=
G
C
D
(
m
,
n
)
,
当
n
<
m
时
=
G
C
D
(
m
,
n
m
o
d
m
)
,
其他
GCD(n,m)=\left\{\begin{matrix} =m,当 m<=n 且 n mod m =0\\ =GCD(m,n),当n<m时\\ =GCD(m,n \mod m),其他 \end{matrix}\right.
GCD(n,m)=⎩
⎨
⎧=m,当m<=n且nmodm=0=GCD(m,n),当n<m时=GCD(m,nmodm),其他
代码
#include <stdio.h>
int GCD(int n, int m)
{
if (m <= n && n % m == 0) return m;
else if (n < m)return GCD(m, n);
else return GCD(m, n % m);
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", GCD(a, b));
}