C语言进阶-第6讲:递归法问题求解(两数的最大公约数)
来源:互联网 发布:淘宝商品资质 编辑:程序博客网 时间:2024/04/29 09:29
任务和代码:
/**All rights reserved*文件名称:main.c*作者: Osseyda*完成日期:2017.11.6*版本号:v2.**问题描述:两数最大公约数的递归版(辗转相除法)*递归思路: 有两整数a和b(a>b): ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去执行 ① 例如,求27和15的最大公约数的过程为: 27%15=12 15%12=3 12%3=0 3即为最大公约数 */#include <stdio.h>int main(){ int a,b,g; scanf("%d %d",&a,&b); g=mygcd(a,b); printf("最大公约数是:%d\n", g); return 0;}int mygcd(int m,int n){ if(m < n){ int temp = m; m = n; n = temp; //n是较小的数 } if(n == 0) return m; //基准条件 return mygcd(n, m%n);}
/**All rights reserved*文件名称:main.c*作者: Osseyda完成日期:2017.11.6*版本号:v2.**问题描述:两数最大公约数的递归版(相减法)*递归思路: 有两整数a和b: ① 若a>b,则a=a-b ② 若a<b,则b=b-a ③ 若a=b,则a(或b)即为两数的最大公约数 ④ 若a≠b,则再回去执行① 例如,求27和15的最大公约数的过程为: 27-15=12(15>12) 15-12=3(12>3) 12-3=9(9>3) 9-3=6(6>3) 6-3=3(3==3) 因此,最大公约数是3*/#include <stdio.h>int main(){ int a,b,g; scanf("%d %d",&a,&b); g=mygcd(a,b); printf("最大公约数是:%d\n", g); return 0;}int mygcd(int m,int n){ if(m==n) return m; else{ if(m>n) return mygcd(m-n,n); else return mygcd(m,n-m); }}
知识点总结:
分别用了辗转相除法和相减法用递归实现了求两数的最大公约数
没有像上一篇中可以直接列写递归方程,但可以写出递归思路
根据递归思路,先编写递归结束条件,再具体实现在函数里调用自身的代码
阅读全文
0 0
- C语言进阶-第6讲:递归法问题求解(两数的最大公约数)
- C语言进阶-第6讲:递归法问题求解(递归求数组的最大值)
- C语言进阶-第6讲:递归法问题求解(易列写递归方程)
- C语言进阶-6讲: 递归法问题求解
- C语言进阶-第22~23讲:问题求解的一般过程&数据结构及算法概述
- 第四周项目五-用递归方法求解(用递归求出两个数的最大公约数)
- C语言及程序设计进阶例程-6 递归法问题求解
- 第12周项目3 用递归函数求解(3、求两个数的最大公约数)
- C语言提高-第5讲: 函数的参数(求4数最大公约数)
- 数独 递归求解(C语言)
- 第12周上机实践项目3——用递归方法求解(求两个数的最大公约数)
- C语言初步-第39讲:问题求解——求素数(输出格式控制)
- 第12周项目3-用递归方法求解--求出两个数的最大公约数
- 第四周项目5:用递归方法求解(3)求两个数的最大公约数
- 【C语言】求解最大公约数
- C语言进阶-第11~13讲:结构体实践(成绩处理&个税计算器之码数分离)
- C语言进阶-第19讲:链表应用(链表的合并)
- 黑马程序员--汉诺塔问题的递归求解C语言
- Android home键和back键区别
- 浏览器缓存机制详解
- Unity 将导入到Sprites文件夹内的图片自动设置类型为Sprite
- Centos 下离线rpm包安装mysql5.7
- IBM 11链接Hadoop最佳实践
- C语言进阶-第6讲:递归法问题求解(两数的最大公约数)
- 05 H5程序测试方法和not found的问题
- 【Oracle】迁移表到其他的表空间
- 接口回调
- jQuery+d3绘制流程图
- 累加运算
- 数据库之数据操作
- 关于程序性能优化的方向
- android.view.InflateException: Binary XML file line #121: Attempt to invoke virtual method