Я знаю, что есть встроенная функция, но я возился с созданием факториалов с нуля, как идея с сайта по кодированию, который я читал.Код здесь:
recursion <- function(n) {
if(n <= 1) {
print(1)
} else {
print(n * recursion(n-1))
}
}
70% времени я получаю этот вывод:
> recursion(5)
[1] 1
[1] 2
[1] 6
[1] 24
[1] 120
но 30% времени я получаю:
> recursion(5)
[1] 120
Может ли кто-нибудь помочь мне понять, почему это может быть, и что я могу сделать, чтобы получить только один вывод?
не уверен, разрешено ли это, но у меня возникает та же проблема, когда я пытаюсь реализовать мемоизацию.
memoization <- function(){
values <- 1
Factorial_mem <- function(x){
if(x < 0){
stop("Factorials can only be computed when x is equal to, or greater
than, zero")
}
if (x == 0 | x == 1){
return(1)
}
if (length(values) < x){
values <<- `length<-`(values, x)
}
if (!is.na(values[x])){
return(values[x])
}
values[x] <<- x * factorial(x-1)
print(values)
}
Factorial_mem
}
выводит иногда:
> Factorial_mem(5)
[1] 120
выводит большую часть времени:
> Factorial_mem(5)
[1] 1 NA NA NA 120
Если мне нужно предоставить дополнительную информацию для уточнения, пожалуйста, дайте мнезнаю, и я могу предоставить это.Я не уверен, уместен ли тот факт, что я использую RStudio.
Спасибо