【发布时间】:2016-01-31 21:08:24
【问题描述】:
我有R运行功能:
f <- function (n) {
if ( n == 1) return (0)
if ( n == 2) return (1)
else return ( f(n-1) + f(n-2))
}
f(50) 需要很长时间来计算。 f(35) 大约需要 30 秒。有没有办法让它在 R 中更快?
编辑。感谢帮助!我使用了它,它立即给了我 f(50)。
> f <- local({
+ memo <- c(1, 1, rep(NA,100))
+ f <- function(x) {
+ if(x == 1) return(0)
+ if(x == 2) return(1)
+ if(x > length(memo))
+ stop("’x’ too big for implementation")
+ if(!is.na(memo[x])) return(memo[x])
+ ans <- f(x-1) + f(x-2)
+ memo[x] <<- ans
+ ans
+ }
+ })
【问题讨论】:
-
是的,通过将结果存储在查找表中。这样你就不会计算每个数字两次。然而,斐波那契的时间复杂度将保持 O(n^2)
-
感谢大家的帮助!我使用了它,它确实立即给了我 f(50) = 7778742049。
标签: r performance recursion sequence