Вы можете написать рекурсивную функцию (функцию, которая вызывает себя). В дополнение к двум аргументам n
и all
также потребуются счетчик i
и (пустой) вектор простых чисел primes
.
До тех пор, пока число найденных простых чисел меньше n
, функция вызывает себя и при каждом вызове сама увеличивает счетную переменную i
. Если i
- простое число, оно добавляется к вектору primes
.
get_prime <- function(n, all = TRUE, i = 1, primes = c()){
if ( n <= 0) {
stop("Not a valid number")
}
if (length(primes) < n) {
if (i == 2L || all(i %% 2L:ceiling(sqrt(i)) != 0)) {
get_prime(n, all = all, i = i + 1, primes = c(primes, i))
} else {
get_prime(n, all = all, i = i + 1, primes = primes)
}
} else {
if (all) {
return(primes)
} else {
return(tail(primes, 1))
}
}
}
Результаты:
get_prime(7, TRUE)
[1] 2 3 5 7 11 13 17
get_prime(7, FALSE)
[1] 17