我试图创建一个递归函数来添加数字值并返回自身。这是我到目前为止所拥有的。
const recursivo = (...v) => v ? v.reduce((a,e) => a + e, 0) + recursivo : 0;
典型的测试用例可能看起来像recursivo(1,2,3)(4,5)(6)
或recursivo(100)
或recursivo(12,34,56)
。
该函数被破坏,因为它返回一个数值和函数,但它不会在下一个参数集上被调用。 (有道理)
是否可以为可能在链式参数集上调用的函数添加值?例如以下内容:
const recursivo = (x,...v) => v ? recursivo(x + v.reduce((a,e) => a + e, 0),"?") : x;
这也不起作用,因为语法不正确,虽然逗号之后的问号只是一个占位符,因为我不确定正确的语法是什么样的;它是链中下一个论点的代表。
如果它实际上是可能的,我怎么能写一个递归函数,它接受一个总和并继续在任意数量的链式参数上调用自己,向下一个参数添加一个数字它会自称吗? (不一定必须使用ES6语法)
编辑:这不是链接的SO帖子的重复,尽管它是相关的。该帖子没有解决处理可能包含多个参数的参数集的问题,该帖子中提出的解决方案也没有解决这个问题。
换句话说,该帖子中提到的解决方案适用于recursivo(1)(2)(3)
等输入,但不,如recursivo(1)(2,3,5)(4,5,7,8,24,156)
。
最终编辑:终于找到了一个可行的解决方案,发布在下面:
function curryo(...v){
let sum = 0;
const fn = (...x) => (sum += x.reduce((a,e) => a + e, 0), fn);
fn.valueOf = _ => sum;
return fn(...v);
}
更改了与 currying 相关的函数名称,而不是递归。已移除recursion
代码并添加了currying
代码。