基于辗转相除法求最大公约数

(1)p=0,q=0 无最大公约数
(2)p=0,q≠0 最大公约数为q
(3)p≠0,q=0 最大公约数为p
(4)p≠0,q≠0 最大公约数可通过辗转相除取余数转化为(2)(3)这样的情况来求解

//递归版,非递归用循环
public class Euclid {
    public static void main(String[] args) {
        System.out.println(euclid(16,8));
    }
    public static int euclid(int p,int q) {
        int r=0,min=0;
        if(p==0||q==0) {
            if(p==0&&q==0)
                return -1;
            else if(p==0)
                return q;
            else if(q==0) {
                return p;
            }
        }
        else {
            if(p<q)
            {
                r = q % p;
                min = p;
            }
            else
            {
                r = p % q;
                min =q;
            }       
        }
        return euclid(min,r);
    }
}
//非递归
public class Euclid {
    public static void main(String[] args) {
        System.out.println(euclid(16,8));
    }
    public static int euclid(int p,int q) {
        int r=0,min=0;
        while(p!=0&&q!=0) {
            if(p<q)
            {
                r = q % p;
                min = p;
            }
            else
            {
                r = p % q;
                min =q;
            }
            p=min;
            q=r;
        }
        if(p==0&&q==0)
            return -1;
        else if(p==0)
            return q;
        else if(q==0) 
            return p;
        return -1;              //为了返回值强行加,突然感觉返回值好烦人
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27378875/article/details/81222365