// 递归法求最大公约数
public int gcd1(int m, int n) {
    if (m < n) {// 保证m>n,若m<n,则进行数据交换
        int temp = m;
        m = n;
        n = temp;
    }
    if (m % n == 0) {// 若余数为0,返回最大公约数
        return n;
    } else { // 否则,进行递归,把n赋给m,把余数赋给n
        return gcd1(n, m % n);
    }
}

// 循环法求最大公约数
public int gcd2(int m, int n) {
    if (m < n) {// 保证m>n,若m<n,则进行数据交换
        int temp = m;
        m = n;
        n = temp;
    }
    while (m % n != 0) {// 在余数不能为0时,进行循环
        int temp = m % n;
        m = n;
        n = temp;
    }
    return n;// 返回最大公约数
}

// 最大公约数
public int gcd3(int m, int n) {
    while (true) {
        if ((m = m % n) == 0) return n;
        if ((n = n % m) == 0) return m;
    }
}

public int gcd4(int m, int n) {
    if (m == n) return m;
    if (m > n) {
        if (m % n == 0) return n;
        while (m > n) m -= n;
    } else {
        if (n % m == 0) return m;
        while (n > m) n -= m;
    }
    if (m == n) return m;
    return gcd4(m, n);
}