R 中的斐波那契记忆
Fibonacci Memoization in R
我正在尝试在 R 中使用递归记忆化实现斐波那契数列。
我对 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)
能否请您提出更正和改进建议。
谢谢
递归变体,但没有记忆会是这样的:
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}
字符串的前两个元素。
我正在尝试在 R 中使用递归记忆化实现斐波那契数列。 我对 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)
能否请您提出更正和改进建议。 谢谢
递归变体,但没有记忆会是这样的:
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}
字符串的前两个元素。