Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaScript动态编程_Javascript_Dynamic Programming - Fatal编程技术网

javaScript动态编程

javaScript动态编程,javascript,dynamic-programming,Javascript,Dynamic Programming,我正在学习如何使用记忆,我有这个问题 const memo={ 0: 0, 1: 0, 2: 1 }; 职能部门(n,备忘录){ //不要更改接下来的四行 如果(备忘录中的n)返回备忘录[n]; 常数n1=tribonaci(n-1) 常数n2=tribonaci(n-2) 常数n3=Tribonaci(n-3) //不要更改前四行 //你的代码在这里 如果(n==1 | n==2)返回1; 备注[n]=n1+n2+n3; 返回备忘录[n]; } 控制台日志(Tribonaci(3))您的代码

我正在学习如何使用记忆,我有这个问题

const memo={
0: 0,
1: 0,
2: 1
};
职能部门(n,备忘录){
//不要更改接下来的四行
如果(备忘录中的n)返回备忘录[n];
常数n1=tribonaci(n-1)
常数n2=tribonaci(n-2)
常数n3=Tribonaci(n-3)
//不要更改前四行
//你的代码在这里
如果(n==1 | n==2)返回1;
备注[n]=n1+n2+n3;
返回备忘录[n];
}

控制台日志(Tribonaci(3))您的代码有两个主要问题:

  • 您创建了一个本地参数
    memo
    ,它始终是
    未定义的
    (除非您将其作为参数传递给函数调用),并覆盖了文件范围
    memo
    变量。只需删除它,即可修复您报告的错误
  • 您的终止案例通常必须在递归的开始处。否则你会得到一个无限循环。在再次调用Tribonaci之前,将第二个
    if
    向上移动到

  • 可能会有更多的问题,但这肯定是两个大问题。

    所以我对它进行了一些重构,现在看起来像这样,但它不会再次传递,它说tribonacci不是一个函数

    // const memo = {0: 0, 1: 0, 2: 1};
    function tribonacci(n, memo = {}) {
      if (n in memo) return memo[n];
      if (n === 1 || n === 2) return 1;
      // DO NOT CHANGE THE NEXT FOUR LINES
      const n1 = tribonacci(n - 1);
      const n2 = tribonacci(n - 2);
      const n3 = tribonacci(n - 3);
      // DO NOT CHANGE THE PREVIOUS FOUR LINES
    
      // Your code here
      memo[n] = (n1, memo) + (n2, memo) + (n3, memo);
      return memo[n];
    }
    
    我确信他们可能希望我使用我注释掉的备忘录对象,但我不确定

    函数tribonaci(n=0,memo={}){ 如果(备注[n])返回备注[n]; 如果(n<2)返回1; const$n1=n-1; const$n2=n-2; const$n3=n-3; 常数n1=备忘录[$n1]| Tribonaci($n1,备忘录) 常数n2=备忘录[$n2]| Tribonaci($n2,备忘录) 常数n3=备忘录[$n3]| Tribonaci($n3,备忘录) 备注[n]=n1+n2+n3; 返回备忘录[n]; }
    控制台日志(Tribonaci(3))您需要删除函数定义中的参数

    const memo={
    0: 0,
    1: 0,
    2: 1
    };
    函数tribonaci(n){
    //不要更改接下来的四行
    如果(备忘录中的n)返回备忘录[n];
    常数n1=tribonaci(n-1)
    常数n2=tribonaci(n-2)
    常数n3=Tribonaci(n-3)
    //不要更改前四行
    //你的代码在这里
    如果(n==1 | n==2)返回1;
    备注[n]=n1+n2+n3;
    返回备忘录[n];
    }
    
    控制台日志(Tribonaci(3))为什么
    memo
    是一个参数?请将您的问题包括用于生成您正在使用的错误消息的参数。修复此错误的唯一方法是更改表示不更改的行。