- public class Test {
- /**
- * 最大公约数
- */
- public static int gcd1_1(int x, int y) {
- int temp;
- do {
- temp = x % y;
- x = y;
- y = temp;
- } while (temp != 0);
- return x;
- }
- /**
- * 上面方法也可以写成下面这种写法
- */
- public static int gcd(int x, int y) {
- if (x % y == 0) {
- return y;
- } else {
- return gcd(y, x % y);
- }
- }
- }
- /**
- * 分析gcd1_1方法
- * 我们先假设x和y的最大公约数为T
- *
- * 情况1.如果x<y do代码块相当于把x和y的值互换,然后转到下面的情况2:
- *
- * 情况2.如果x>=y,只会有下面两种情况:
- * ->>2.1 如果x和y的最大公约数T== y的话
- * 那么 x%y=0;返回y即可
- *
- * ->>2.2 如果x和y的最大公约数T<y的话 那么x = mT,y=nT (并且m>n)
- * 那么x%y=temp,此时temp一定也是T的整数倍,假设temp=qT,则q一定小于n。此时temp和y的公约数也即是所求的公约数。
- * 如此递归进行2.2步骤,则最终q会越来越小,直至q==1的时候,x%y==0,则此时y的值即为所求最大公约数。
- *
- *
- *
- */
复制代码
|