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;
// ^^^^^^^^^^^^^^
}
我正在尝试找出 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;
// ^^^^^^^^^^^^^^
}