Я думаю, у вас есть несколько способов сделать это:
- Подход 1: Переопределить
fib
рекурсивным способом
fib <- function(n) {
if (n<=2) return(rep(1,n))
c(u <- Recall(n-1),sum(tail(u,2)))
}
такой, что
> fib(10)
[1] 1 1 2 3 5 8 13 21 34 55
> fib(20)
[1] 1 1 2 3 5 8 13 21 34 55 89
[12] 144 233 377 610 987 1597 2584 4181 6765
- Подход 2: Используйте
fib
, но с sapply
fib1 <- function(n) sapply(seq(n),fib)
таким, что
> fib1(10)
[1] 1 1 2 3 5 8 13 21 34 55
> fib1(20)
[1] 1 1 2 3 5 8 13 21 34 55 89
[12] 144 233 377 610 987 1597 2584 4181 6765
- Подход 3: Использование
for
l oop ( Я думаю, что это будет самый эффективный из трех подходов )
fib2 <- function(n) {
r <- rep(1,n)
if (n>=3) {
for (k in 3:n) {
r[k] <- sum(r[k-(1:2)])
}
}
r
}
такой, что
> fib2(10)
[1] 1 1 2 3 5 8 13 21 34 55
> fib2(20)
[1] 1 1 2 3 5 8 13 21 34 55 89
[12] 144 233 377 610 987 1597 2584 4181 6765