美文网首页js
js递归实现最大公约数与最小公倍数

js递归实现最大公约数与最小公倍数

作者: world_7735 | 来源:发表于2018-12-29 16:17 被阅读341次

    先说一说关于最大公约数与最小公倍数怎么算的;

    两个数A B相除取余C,第二个数B除C取余,直到整除,那么被除数被最小公倍数。(辗转相除法);

    最小公倍数:两个数相乘除以最大公约数;

    逻辑流程图

    按照题意求最大公约数看到判断循环首先想到的就是if、while、for;

    好,那就先用while实现以下

    先放简单的html

    <p>输入两个数</p>
    <input type="text" id="num1" >
    <input type="text" id="num2">
    <input type="button" id="da" value="求最大公约数">
    <input type="button" id="xiao" value="求最小公倍数">
    

    然后是js

    //最大公约数
            function gcd( x ,  y){  
            var max,min,temp;  
            max = x > y ? x : y ;  
            min = x < y ? x : y ;  
            while( max % min ){  
      
                temp = max % min;  
                max = min;  
                min = temp;  
            }  
            return min;  
            }  
            //最小公倍数  
            function lcm(  x ,  y ){  
                return x*y/gcd(x,y);  
            }  
            document.getElementById('da').onclick = function () {
                alert("最小公约数为:"+gcd(document.getElementById('num1').value,document.getElementById('num2').value));
            }
    

    用while实现还是很麻烦的!

    我们现在用递归实现一下

    function digui(m , n){
                return m%n==0?(n):(digui(n,m%n));
            }
            document.getElementById('da').onclick = function () {
                alert("最小公约数为:"+digui(document.getElementById('num1').value,document.getElementById('num2').value));
            }
            document.getElementById('xiao').onclick = function () {
                var da = (document.getElementById('num1').value*document.getElementById('num2').value)/(digui(document.getElementById('num1').value,document.getElementById('num2').value));
                alert("最小公倍数为:"+da);
            }
    

    实现部分只有短短的一行!

    逻辑流程图


    相关文章

      网友评论

        本文标题:js递归实现最大公约数与最小公倍数

        本文链接:https://www.haomeiwen.com/subject/gdkplqtx.html