首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >欧几里得算法- JavaScript

欧几里得算法- JavaScript
EN

Stack Overflow用户
提问于 2015-08-17 11:09:46
回答 4查看 3.4K关注 0票数 2

我是JavaScript的新手,我正在学习递归函数。具体地说,我正在研究欧几里德算法。除了第2行的基本情况"if (!b) { return a;}“之外,这一切对我都很有意义。我知道在某个时刻a%b将等于NaN,这时递归调用应该停止。b)“意思是最简单的形式?我不能理解这一点。我很感谢提前得到的反馈!”

// Euclid's Algorithm 

var gcd = function(a, b) {  
   if (!b) {  
       return a;  
   }  

   return gcd(b, a % b);  
};  
console.log(gcd(462, 910));
EN

回答 4

Stack Overflow用户

发布于 2015-08-17 11:16:48

这就是欧几里德算法背后的原理。

gcd(a, b) = gcd(b, a%b)

但当b为0时除外。这种情况下的结果是什么?你可以想象0实际上有无限的因子:你可以用0除以任何数,余数永远是0。

由此,我们可以推导出

gcd(a, 0) = a

这就是算法的停止情况。if (!b)实际上是在检查是否为b===0,并在本例中返回a

票数 1
EN

Stack Overflow用户

发布于 2015-08-17 11:18:49

(!b)计算变量b以返回值false。在JavaScript中,NaN是falsey,这意味着它不是false,但在布尔值计算中,它的计算结果将为false。

正如其他人所提到的,变量b将等于0,而不是NaN。我只是为了原来的问题解释了NaN是如何评估的。

票数 1
EN

Stack Overflow用户

发布于 2018-10-21 06:05:51

欧几里德算法的基本情况发生在其中一个参数等于零时,这意味着两个数的最大公约数是非零数。您可以参考此链接查看一些示例:https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm

下面是我实现欧几里得算法的方法:

   function gcd(a, b) {
        // base cases
        if(a === 0) { return b;}
        if(b === 0) { return a;}

        // decrease and conqure - recursion
        return gcd(b, a % b);
    }

    console.log(gcd(9, 6));
    console.log(gcd(6, 9));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32042240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档