求解最大公因数(递归)
1. 常见解法
思路:
用户输入两个值 m n
1.先判断两个值大小
2.求解公式 m % n == 0; n即为 公因数
3.求解两个数最大公因数 最大公因数 最大值应为 两个输入值最小的那个值(如输入 3 6 最大公因数为 3)
4. 求解最大公因数 为了减少代码庸余 可以从输入数字最小值依次递减
public static int getMax(int m, int n) {
//找到最大最小两个数
int max = (m > n)? m:n;
int min = (m < n )? m: n;
//定义一个值去接收答案
int a = 0;
// 输入最小值依次递减
for(int i = min; i>=1; i--){
//如果 i 被整除,那么i即为最大公因数
if(max % i == 0){
a = i;
break;
}
}
return a;
}
2. 递归解法
方法一:
//求最大公约数
public static int getMax(int m , int n){
//判断两个数谁大
int max = (m > n)? m:n;
int min = (m < n)? m: n;
//程序出口当min == 1,最大公因数为 1
if(min == 1){
return 1;
}
if(max % min == 0){
//如果满足及返回 min
return min;
}else{
//如果不满足,min值减一
return getMax(max, min-1);
}
}
方法二 :辗转相除
方法一: 只是提供思路 代码可以优化
方式二: 思路分析:
辗转相除:
输入两个数 m n
如果 m % n !=0 ;
那么就 将 n 作为除数 m%n作为被除数
进行循环
即:
f(m,n) = f(n,m%n);
//求最大公约数
public static int show3(int m , int n){
//被除数减减为0
if(n == 0){
return m;
}
return show3(n, m % n);
//如果 m % n == 0 那么输出 n
//如果 m % n != 0;就将 n作为除数,m%n作为被除数
//f(m,n) = f(n,m%n);
}