zoukankan      html  css  js  c++  java
  • 关于辗转相除法(欧几里得算法)| 递归与非递归

    这个算法应该是比较简单的,while ,do……while,for等语句都可以实现,我这里用的是do……while。可能会有部分漏洞,希望各位大佬指出

    非递归代码如下:

    #include<stdio.h>
    int main(){
        int a,b,c;
        printf("输入a,b的数值
    ");
        scanf("%d%d",&a,&b);
        if(a<b){//当a<b时,交换二者大小从而来取余 
            c=a;
            a=b;
            b=c;
        } 
        do{
            c=a%b;
            a=b;
            b=c;
        }
        while(c!=0);
        printf("最大公约数为%d
    ",a);//注意这里要选择的是a,因为将要跳出循环时,b的值为0,此时a的值刚好是上一次循环b的值 

    这里是递归代码:

    #include <stdio.h>
    int function(int a,int b){//定义函数 
        int c;
        if(a<b){
            c=a;
            a=b;
            b=c;
        }
        if(a%b==0) return b;
        else return function(b,a%b);//采用递归,改变除数和被除数的变量 
    }
    int main(){//这里开始主函数 
       int a,b;
       printf("请输入两个数a,b
    ");
       scanf("%d%d",&a,&b);
       printf("最大公约数为%d",function(a,b));
        
    } 

    ok,以上即是辗转相除法的个人见解,欢迎各位大佬指点!

    人生如逆旅,我亦是行人
  • 相关阅读:
    apk反编译
    Hybrid App
    Hybrid App
    Hybrid App
    Hybrid App 介绍
    android-adb
    .java生成dex文件
    android Activity launch mode 知识点总结
    2018.10.15学习总结
    2018.10.12
  • 原文地址:https://www.cnblogs.com/sz2003/p/14044983.html
Copyright © 2011-2022 走看看