Javascript 使用动态规划的斐波那契数列闭包

Javascript closure in fibonacci series using dynamic programming

我正在尝试找出 Javascript 中的闭包。

正在尝试使用 DP 计算斐波那契数列。 这里我的输入将是索引:索引 = 10 输出:55(根据斐波那契数列:0,1,1,2,3,5,8,13,21,34,55..)

以下版本是工作代码:

function recursiveDynamicProgramming(){
let cache = {};
//use javascript closure method
return function getFib(n){
//var getFib = function(n){ : When i assign function to this variable. I am getting undefined error. Although it has return value :(
    if(n in cache){//if(cache[n])
        return cache[n];
    } else{
        if(n < 2){
            return n;
        }else{
            cache[n] = getFib(n - 2) + getFib(n - 1);
            return cache[n];
        }
    }
}
}  
const dynamicProdFib = recursiveDynamicProgramming();
console.log(dynamicProdFib(10)); //Output = 55, Input = 10
//console.log(dynamicProdFib.getFib(10)); //This should give me the same result as the variable getFib is defined in the program.

所以在这里如果你可以参考注释代码

//var getFib = function(n){ : When i assign function to this variable. I am getting undefined error. 
 Although it has return value //Or we can use this.getFib = function(n)

但是当我尝试调用此方法时出现未定义错误。这仅仅意味着我的函数没有返回值。但是我在这个函数中返回值。 我不确定我哪里弄错了。

我们有几个关于这个问题的例子,但我无法解决这个问题。 请原谅我。谢谢你的帮助:)

更新: 感谢@Bergi 指出我的愚蠢错误。

在我的例子中,我试图调用如下输出:

dynamicProdFib.getFib(10)

所以我必须将输出放在一个对象中:

  return {getFib};

或者简单地将输出称为:

return dynamicProdFib(10)

希望这对您有所帮助:)

您在 getFib 函数中 return 是不够的,您缺少的部分是您还需要 return getFib 函数recursiveDynamicProgramming。不过,为此引入一个辅助变量可能会有所帮助:

function recursiveDynamicProgramming() {
    let cache = {};
    var getFib = function(n) { // or just "function getFib(n) {"
        …
    };
    return getFib;
//  ^^^^^^^^^^^^^^
}