问题描述
我正在尝试解决 CodeWars 上的以下问题:A Chain adding function:
add(1)(2);
// returns 3
我们还希望能够继续向我们的链中添加数字。
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
等等。
单个调用应返回传入的号码。
add(1); // 1
我们应该能够存储返回的值并重用它们。
var addTwo = add(2);
addTwo; // 2
addTwo + 5; // 7
addTwo(3); // 5
addTwo(3)(5); // 10
我们可以假设传入的任何数字都是有效的整数。
我尝试了很多小时,但都无济于事。喜欢例如。
add(1)(2)(4) <--- 3 chained functions
我了解了“柯里化”是什么,但是在我的主函数中返回一个函数只会满足 add(1)(2)
如果示例测试是 add(5)(13)(3)(10)(5)(6)(20)
,那就是 7 个链接的函数...我不可能连续输入 7 个函数,除了第一个函数(主函数)之外,一个接一个地返回。
请问有没有什么方法可以检查链式函数的长度?除了我的问题,我希望得到一些提示,我并不是要一个完整的答案。
解决方法
我不可能在一行中输入 7 个函数返回一个在另一个之前
这就是为什么您需要创建一个递归解决方案,使其适用于任何链长。
我应该补充一点,为了解决这个问题,您必须非常仔细地查看测试过的内容。这是一项测试:
Test.expect(add(1)(2)(3) == 6);
特别注意使用的相等运算符。这应该会提示您如何返回一个值,该值既可以用于进一步链接,和 可以同时等于一个数字。
提示 1:
不是同一种等式
==
与===
提示 2:
valueOf
提示 3:
函数是对象。它们可以像任何其他对象一样拥有自定义属性。
提示 4:
确保返回一个函数,该函数具有返回当前总和值的自定义
valueOf
方法。
提示 5:
使用递归调用,传递给它的总和:
1.传递给最外层函数调用的参数
2. 传递给返回函数的参数