欧几里德算法- JavaScript
Euclid's Algorithm - JavaScript
我是JavaScript的新手,我正在学习递归函数。具体来说,我正在研究欧几里得算法。除了第2行的基本情况"if (!B){返回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));
这就是欧几里得算法的基本原理。
gcd(a, b) = gcd(b, a%b)
但b
为0时除外。这个案子的结果是什么?你可以想象0实际上有无限个因数:你可以用0除以任何数,余数总是0。
由此,我们可以推出
gcd(a, 0) = a
这是算法的终止情况。
if (!b)
实际检查是否为b===0
,在本例中返回a
。(!B)正在对变量B求值以返回false值。在JavaScript中NaN是假的,这意味着它不是假的,但它会在布尔值中计算为假。
正如其他人提到的,变量b将等于0而不是NaN。我只是在解释NaN是如何计算的
欧几里得算法的基本情况发生在其中一个参数等于零时,这意味着两个数的最大公约数是非零数。你可以参考这个链接看一些例子: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));
简单地说,在这种情况下,!b
与b == 0
相同。0作为真值为假,因此!0
将为真。
换句话说,当b
为零时,函数返回a
,否则继续进行更多递归层。
你认为a % b
将变成NaN
的论点实际上是错误的- b
变成零的事实,并且你检测到,这意味着你从来没有真正将任何东西除以零得到NaN
。
//I'm glad that I can help others, here is my version:
//Euclid's algorithm:
//1)Find reminder of division m by n
//2)If remainder is zero, n is a solution
//3)Reduce(if r != zero)
const euclid = function(num1, num2){
//compute the remainder:
var remainder = num1 % num2;
if(remainder == 0){
return num2;
}else{
//step 3:
num1 = num2;
num2 = remainder;
return euclid(num1, num2);
}
}
//test the result:
console.log(euclid(80, 30));
相关文章:
- javascript扫雷器floodfill算法不能正常工作
- Vanilla Javascript算法,如何做和解释
- JavaScript算法,提供每种可能的项目组合,并将它们存储在数组中
- 用于查找基于时间的事件的最佳Javascript算法
- 反转JavaScript算法
- 用于创建数学减法方程的简单JavaScript算法
- JavaScript 算法性能 - 计算可被 k 整除的范围内的数字数
- 求和对的独特排列:Javascript算法
- 函数式 Javascript 算法不从过滤器返回预期结果
- 有效的javascript算法,用于从数组中选择项目,其中每个条目具有不同的权重
- 在javascript算法中使用私有MD5密钥的安全方式
- 从字符串javascript算法中删除字符
- 过滤联系人详细信息的Javascript算法
- 谁可以帮助解释这个JavaScript算法[].filter.call()
- 返回语句在递归javascript算法,如何返回所有的方式堆栈
- 简单的Javascript算法
- 获取类似excel的列名的Javascript算法
- 路径查找javascript算法无法正常工作'他应该这样做
- JavaScript算法转换为罗马数字
- Javascript算法添加数字到文本框