(function(){
function Count(a,b){
if(b == 0){
return a;
}else{
var c = a%b;
a=b;
b=c;
return Count(a,b)
}
}
window.Count = Count;
})();
结果:
分析:
以上是使用辗转相除法求最大公约数.它背后的计算原理到底是什么样子呢,为什么这样几笔就能计算出最大公约数.首先我们可以明确一个规律,如果有两个数a和b,b如果为0,那么a和b的最大公约数一定是a.所以我们要想尽各种办法将两个数变成其中一个数为0的情况.假如现有两个数42和18,它们存在一个最大公约数m.42可以转化为18+24,由于42能整除m,18能整除m,那么24也能整除m.此时就可以由求42和18的公约数转换成求24和18的公约数.按照以上规则继续转换成18和6,12和6,6和6,6和0.到了此时求48和18的最大公约数就转化成了求6和0的最大公约数.
在以上的Count函数当中a%b发挥了巨大的作用:
1.假如a<b,a%b等于a,经过上面函数的一转换,能够保证a永远是最大值
2.假如a>b但不整除,那么a%b就是a与b之间的差值,接下来就转换成了求b与差值之间的最大公约数
3. 假如a能整除于b,它就直接给你转换成了求b和0的最大公约数
Count函数的整个过程就是不断的将两个数转换,直到b等于0.