我正在做一个练习,要求我用尾部递归在scala中实现isprime。不过,我确实有一个实现,我在生成正确的基本情况时遇到了问题。
所以我的算法需要检查从2到N/2的所有数字,因为N/2是N的最大因子。

def isPrime(n: Int): Boolean = {
    def isPrimeUntil(t: Int): Boolean = {
        if(t == 2) true
        else n % t != 0 && isPrimeUntil(t - 1)
    }

    isPrimeUntil(n/2)
}

所以基本上,如果我想检查15是否是一个素数,我会检查从7到2的所有数字。
这是我的踪迹:
isPrimeUntil(7) -> true && isPrimeUntil(6)
-> true && isPrimeUntil(5)
-> false && isPrimeUntil(4)
由于短路评估,函数此时返回false。
但是,对于检查3是否为素数的基本情况,我的实现失败了。

最佳答案

3不是你唯一的问题它还返回true。。。
你的基本情况应该是4,而不是1

   def isPrimeUntil(t: Int): Boolean = t == 1 || t > 1 && n%t != 0 && isPrimeUntil(t-1)

关于algorithm - 使用尾部递归在Scala中实现isPrime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54081821/

10-09 02:48