我是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));
发布于 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
。
发布于 2015-08-17 11:18:49
(!b)计算变量b以返回值false。在JavaScript中,NaN是falsey,这意味着它不是false,但在布尔值计算中,它的计算结果将为false。
正如其他人所提到的,变量b将等于0,而不是NaN。我只是为了原来的问题解释了NaN是如何评估的。
发布于 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));
https://stackoverflow.com/questions/32042240
复制相似问题