我想使用反向递归。我试图将递归中的所有值添加到备忘录对象中。 我在视觉工作室代码中。 我的线路有错误
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];
最后的额外大括号就是问题所在。请检查下面更正后的代码。
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)));
虽然它不是最佳代码,但可以完成这项工作。 为什么不简单地迭代和乘法。