Я работаю над упражнением, которое требует от меня реализации isPrime в scala с использованием хвостовой рекурсии. Однако у меня есть реализация, у меня проблемы с созданием правильного базового варианта.
Так что мой алгоритм включает проверку всех чисел от 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 простым.