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