javascript 如果 if 语句为 true,则会引发错误

问题描述 投票:0回答:1

我想使用反向递归。我试图将递归中的所有值添加到备忘录对象中。 我在视觉工作室代码中。 我的线路有错误

if( key==n) return memo[n]; 
在最后一次迭代中,它引发了未定义的错误。 但直到最后一次迭代,该行都没有给出任何错误。我有一个打印键和 n 个变量。

当我检查 if 子句内部的 key 中有一个值时,没有 key 变量。 在 if 内部,该键不存在。 有什么想法吗?

const factorial = (x=0,n=0, memo={})=> {const key = x ;}
console.log(key);
console.log(n);
if (key==0 || key==1) {memo[key]=1;}
if(key!=0 && key!=1) {memo[key]=memo[key-1]*key;}
if( key==n) return memo[n];
factorial(x=key+1,n,memo)
};
console.log(factorial(x=0,n=3));

这表明问题出在 if 子句中

if(1==1 ) return memo[key];

此替换再次引发错误

if(key==key) return memo[n];

javascript undefined
1个回答
0
投票

最后的额外大括号就是问题所在。请检查下面更正后的代码。

const factorial = (x = 0, n = 0, memo = {}) => {
  const key = x;
  if (key == 0 || key == 1) {
    memo[key] = 1;
  }
  if (key != 0 && key != 1) {
    memo[key] = memo[key - 1] * key;
  }
  if (key == n) return memo[n];
  return factorial((x = key + 1), n, memo);
};
console.log(factorial((x = 0), (n = 5)));

虽然它不是最佳代码,但可以完成这项工作。 为什么不简单地迭代和乘法。

© www.soinside.com 2019 - 2024. All rights reserved.