我正在尝试使用R中的递归Memoization实现Fibonacci序列。 我对R有基本的想法,并尝试使用它们。
这是我尝试过的代码(不工作)。
rm(list = ls()) ##Clearing Environment
##Fibonacci_using Recursion
fibvals <<- numeric(3)
fibvals[1:length(fibvals)] <- NA
fib_recursive <- function(n){
if(is.na(fibvals[n])){
if (n == 1) {
fibvals[n] <- 0
return(0)
}
if (n == 2){
fibvals[1] <- 0
fibvals[n] <- 1
return(1)
}
fibvals[n] <- (fib_recursive(n - 1) + fib_recursive(n - 2))
}
return(fibvals)
}
fib_recursive(5)
您能否建议更正和改进。 感谢。
答案 0 :(得分:0)
递归变体,但没有memoization就是这样的:
int fibonnaci(int n) {
if(n == 1 || n == 2)
return 1;
return fibonnaci(n-1) + fibonnaci(n-2);
}
显然,这段代码经常重复相同的计算。您必须将值存储在数组中,代码看起来像这样
int fibonnaci(int n) {
if(a[n]==0)
a[n]=fibonnaci(n-1) + fibonnaci(n-2);
return a[n];
}
另外,不要忘记字符串的前两个元素a[MAXN] = {1, 1}
。