gpt4 book ai didi

javascript - 拼接和移位功能在递归中无法按预期工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:29:22 30 4
gpt4 key购买 nike

我正在编写我的第一行 JS 代码,现在我正在尝试做一个简单的递归函数。

我知道 splice()shift() 会删除它们提取的项目。

我在这里遇到了麻烦:

function sub (...par) { // It could take an arbitrary number of parameters

if (par.length >= 2)
{
var val = par.shift();
//val = par.splice(0,1);
return val - sub(par);
}
else
{
/*EDIT*/ //return par[0];
return -par[0];
}
}

现在如果我运行:sub (17,7) 我正确地得到了 10,但是如果我运行 sub(17,7,3) 而不是 8 我得到了 NaN

已修复,感谢 Jonas Wilms 的帮助:

function sub (...par) { // It could take an arbitrary number of parameters

if (par.length >= 2)
{
var val = par.shift();
//val = par.splice(0,1);
return val - sub(...par);
}
else
{
/*EDIT*/ //return par[0];
return -par[0];
}
}

最佳答案

你必须在递归调用上展开:

  return val - sub(...par);

否则被调用的 sub 内的 par 将是一个包含数组的数组,并且对其进行减法将失败。

然而,如果直接采用第一个参数,整个事情会更加优雅:

  function sub(head, ...rest) {
if(!rest.length) return head;
return head - sub(...rest);
}

但是应该注意,当您先计算右侧再计算左侧时,您可能得不到预期的结果,所以

  sub(1, 2, 3)

等于

 1 - (2 - 3)

那就是 2。

我认为如果 sub(1, 2, 3) 等于 1 - 2 - 3 可以通过以下方式实现会更清楚:

 function sub(...rest) {
if(rest.length === 1) return rest[0];
const last = rest.pop();
return sub(...rest) - last;
}

或者不用递归:

  const sub = (...args) => args.reduce((a, b) => a - b);

关于javascript - 拼接和移位功能在递归中无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56447124/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com