一、循环的方式:
//功能:求两个数的最大公约数
//参数:两个数:
//返回值:最大公约数
function f(m,n){
//1、求最小数
var min = m<n?m:n;
//2、从大到小循环找第一个公约数
for(var i=min;i>=2;i--){
if(m%i==0 && n%i==0){
return i;
}
}
return 1;
}
二、递归的方式:
首先确定如何求最大公约数,我们采用欧几里得算法(辗转相除法),算法描述如下:
例:48,57
57%48=9 大数对小数求余
48%9=3 小数对上次的余数求余,重复这个过程直到余数为0
9%3=0 余数为0时,此次求余的小数就是最大公约数
如下示意图:
//功能:求两个数的最大公约数
//参数:两个数:
//返回值:最大公约数
function f(m,n){
//大数能否整除小数,
if(m>n){
var max = m;
var min = n;
}else{
var min = m;
var max = n;
}
if(max%min==0){
//1、如果能整除,小数就是最大公约数
return min;
}else{
//2、如果不能整除,那就求小数和余数的最大公约数
return f(min,max%min);
}
}