我正在做一个练习,要求我用尾部递归在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/