C语言| 递归求两个数的最大公约数
C语言| 函数的递归调用
【递归求两个数的最大公约数】
难点在于如何呈现出求解最大公约数
数学上求解两个数的最大公约数有多种方法,包括辗转相除法、相减法、穷举法等。
辗转相除法,也称为欧几里得算法,是求解最大公约数的经典方法。具体步骤如下:
1 取两个数中较大的数作为除数,较小的数作为被除数。
2 用较大的数除以较小的数,如果余数为0,则较小的数即为这两个数的最大公约数。
3 如果余数不为0,则用较小的数除以上一步计算出的余数,直到余数为0。此时,上一步的余数即为这两个数的最大公约数。
【分析过程】
自定义一个函数ZDGYS()求解最大公约数,主函数再直接调用它。
[ZDGYS()函数]
不断取余,直到余数为0.
mod=m%n;m=n; n=mod;不断带进去计算,直到出现余数为0。
举例 m=20, n=15
mod=m%n=20%15=5; m=n=15; n=mod=5;
mod=m%n=15%5=0; m=n=5; n=mod=0;
所以最大公约数为5.
【程序代码】
#include <stdio.h>
int ZDGYS(int m, int n); //函数声明
int main(void)
{
int m, n;
printf("请输入m,n的值:");
scanf("%d %d", &m, &n);
printf("m=%d,n=%d,它们的最大公约数为%d\n", m, n, ZDGYS(m,n));
return 0;
}
int ZDGYS(int m, int n)
{
if(m%n == 0)
{
return n;
}
else
{
return ZDGYS(n, m%n);
}
}