【问题标题】:Please someone please explain me the difference between the below mention functions请有人解释一下下面提到的功能之间的区别
【发布时间】:2019-03-13 21:31:29
【问题描述】:

第一个函数

function isPrime(num) {
    if(num < 2) return false;
    for (var i = 2; i < num; i++) {
        if(num%i==0){
            return false;
        }else{
            return true;
        }
    }
}

第二个功能

function isPrime(num) {
    if(num < 2) return false;
    for (var i = 2; i < num; i++) {
        if(num%i==0)
            return false;
    }
    return true;
}

我真的无法将我的想法包裹在这段代码上..

【问题讨论】:

  • 在第一种情况下,你的循环只会运行它的第一次迭代并返回 false 或 true,也就是说它不会工作。在第二种情况下,它将遍历所有值并检查它是否可被从 2 到 n 的每个 i 整除,如果没有则返回 true,这就是你计算的方式是一个数是素数(这个算法虽然不是很有效)。
  • 第一个函数将始终在第一次迭代中退出,因为 return falsereturn true 被执行。只有当num%i==0 为真时,第二个才会从循环中返回。
  • 这里是一个更简单的例子:function one() { if (false) { return false; } else { return true; } console.log('end'); }function two() { if (false) { return false; } console.log('end'); return true; }。这基本上是您的示例,但没有循环。注意one 不记录“结束”,而two 记录。

标签: javascript for-loop


【解决方案1】:

由于else 语句,第一个迭代将在第一次迭代后立即停止。 return 打破循环。它只会测试你给的数字是偶数还是奇数num%2 == 0

只有在条件得到验证(同样,return 打破循环)或所有迭代结束时,第二个才会停止。

在你的例子中,只有第二个给出了预期的结果:

function isPrimeA(num) {
    if(num < 2) return false;
    for (var i = 2; i < num; i++) {
        if(num%i==0){
            return false;
        }else{
            return true;
        }
    }
}

function isPrimeB(num) {
    if(num < 2) return false;
    for (var i = 2; i < num; i++) {
        if(num%i==0)
            return false;
    }
    
    return true;
}

console.log(isPrimeA(15))
console.log(isPrimeB(15))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2011-12-11
    • 2013-12-04
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多