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.

【程序代码】

C语言| 递归求两个数的最大公约数_第1张图片

C语言| 递归求两个数的最大公约数_第2张图片

#include

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);
    }
}

你可能感兴趣的:(C语言,c语言)