当前位置:嗨网首页>书籍在线阅读

09-求最大公约数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

12.1.7 求最大公约数

问题描述

19.png 用递归函数求两个整数m和n的最大公约数。

【分析】

两个整数m和n的最大公约数gcd具有以下性质。

355.gif 用C语言描述如下。

if(m>n)
    return gcd(m-n,n);
else if(m<n)
    return gcd(m,n-m);
else
    return m;
第12章\实例12-07.c
/********************************************
*实例说明:求最大公约数
*********************************************/
1  #include<stdio.h>
2  int gcd(int m,int n);
3  void main()
4  {
5      int m,n;
6      printf("请输入两个正整数:");
7      scanf("%d,%d",&m,&n);
8      printf("最大公约数是%d\n",gcd(m,n));
9  }
10 int gcd(int m,int n)
11 {
12     if(m>n)
13         return gcd(m-n,n);
14     else if(m<n)
15         return gcd(m,n-m);
16     else
17         return m;
18 }

运行结果如图12.11所示。

356.png

图12.11 运行结果

【说明】

这种不断相减的方法与辗转相除法本质上是一样的,都是在寻找m和n公用的部分。