R中的斐波纳契记忆化

时间:2015-07-28 17:40:55

标签: r fibonacci memoization

我正在尝试使用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)

您能否建议更正和改进。 感谢。

1 个答案:

答案 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}