Я вижу, что если я использую мемоиз для функции двумя разными способами, я получаю два разных поведения, и я хотел бы понять, почему.
# Non Memoised function
fib <- function(n) {
if (n < 2) return(1)
fib(n - 2) + fib(n - 1)
}
system.time(fib(23))
system.time(fib(24))
library(memoise)
# Memoisation stragagy 1
fib_fast <- memoise(function(n) {
if (n < 2) return(1)
fib_fast(n - 2) + fib_fast(n - 1)
})
system.time(fib_fast(23))
system.time(fib_fast(24))
# Memoisation strategy 2
fib_not_as_fast <- memoise(fib)
system.time(fib_not_as_fast(23))
system.time(fib_not_as_fast(24))
Стратегия 1 действительно быстрая, поскольку она повторно использует рекурсивные результаты, тогда как стратегия 2 работает быстро только в том случае, если точный ввод был замечен ранее.
Может кто-нибудь объяснить мне, почему это так?