参见英文答案 > Variadic curried sum function11个
这是一个我尚未弄清楚的面试问题.考虑以下:
function recurse(a) {
    return function(b) {
        console.log(a + b);
    }
}

//This will log '5' in the console
recurse(2)(3);

现在我被要求编写一个函数,它将获取n个参数,并通过记录参数值的最终总和以相同的方式工作.含义:

//This should log '13'
recurse(2)(3)(1)(7)

如何编写这样的函数?我已经尝试过在递归,动态参数等方面进行思考.但是还没有能够记下任何具体的东西.

解决方法

这是我能想到的最简单的版本:
function add (a) {
  return function (b) {
    return b == null ? a : add(a+b);
  }
}

console.log( 
  add(2)(3)() 
);
console.log(
  add(10)(100)(1000)(4)() 
);

在es6中,它很紧凑!

let add = a => b => b == null ? a : add(a+b);

注意

你的问题的问题是函数可以返回一个函数或一个数字.以下代码:

let result = add(2)(3);

相当于:

/*1*/ let partialResult = add(2);
/*2*/ let result = partialResult(3);

在第1行中,add不知道是否使用最后一个参数调用它!换句话说,它不知道partialResult应该是一个数字,还是一个将用另一个参数调用的函数.

Nina Scholz为您提供了一个解决方案,其中partialResult在处理时像primitive一样表现得像一个数字,就像函数一样被调用时.在我的解决方案中,partialResult总是像一个函数一样,并在没有参数的情况下调用时返回一个sum.

第一种方法需要一种特定于语言的机制,以便在某些条件下“表现得像一个数字”.如果您的采访是关于JavaScript的,那么这是最好的近似值!但在语言不可知的背景下,你所要求的是不可能的.

javascript – 使用动态参数递归的更多相关文章

  1. ios – Swift:递归值类型

    我有一个结构,我想要一个结构类型的全局变量?这个例子本质上是我实际创建的结构的简化版本.但是,它会抛出错误:有没有办法解决这个问题?

  2. swift override --有一个递归问题未解决

    classca{varcount:Int{get{return1;}set{self.count=newValue;}}funcdescribe()->String{return"ca";}}classcb:ca{overridefuncdescribe()->String{return"cb";}overridevarcount:Int{get{return2;}set{//引起了递归调用,未找

  3. Swift讲解专题九——枚举

    Swift讲解专题九——枚举一、引言在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。

  4. Swift实现尾调用优化?和在相互递归的情况下?

    特别是如果我有以下代码:将Swift编译器优化到一个循环?在下面更有趣的情况下是这样吗?最好的检查方法是检查编译器生成的汇编语言代码。我把上面的代码和编译它:输出的相关部分这清楚地表明,swift在这两种情况下都做尾调用优化。此外,isOdd/isEven函数的有趣之处在于,编译器不仅似乎执行TCO,而且还在每种情况下内联其他函数。

  5. swift – 使用依赖于元素类型的递归属性/方法扩展Collection

    –但调度已关闭:$1.flatCount不绑定到第二个递归版本,但总是绑定到第一个普通版本.也就是说,flatCount仅计算第一个嵌套级别.有没有办法以表达此功能的方式处理类型和/或调度?

  6. 解决Swift 3中缺少递归协议约束的问题

    Swift3目前对“递归协议约束”有一个限制.有一个公开的问题here,在here,here和here有类似的讨论.但是,我仍然没有看到应该如何解决这个限制.可能吗?或者我需要开始引入较不严格的协议,直到在Swift中实现?会出现.然而,通过这种方法,我们可以得到正确的类型,而无需做很多专业化.当然,可以添加更多的协议来获得更多的抽象,但同样的解决方案将会适用.由于某些原因/语言缺陷,您必须在View.foo中分配委托时使用显式转换:viewmodel.delegate=selfas?

  7. Swift Sliceable上的递归

    事实证明,有一个通用的解决方案.您需要添加这些通用要求:对于发布的问题,这给出了:这是任何切片上有用的通用缩减:我不能相信这一点,Apple开发论坛上的解决方案是posted.令人遗憾的是,通用要求如此涉及到这样一个基本操作–它几乎不直观!

  8. Swift:覆盖didSet会导致递归

    当覆盖一个属性的didSet观察者会导致递归,为什么?如果我更新QuadInt所以我猜这个电话是这样的:这或多或少是在黑暗中拍摄.有没有关于物业更新会发生什么的文件?和等等.通过明确使用超级,你打破了这个循环,因为现在你没有设置你的被覆盖的属性,而是继承的超级属性,你并没有真正观察超级属性,你只是观察自己的覆盖的属性.在一些语言中,您可以遇到与覆盖方法类似的问题,其中典型的解决方案也是在其中一个调用中显式地使用super.

  9. python小球落地问题及解决(递归函数)

    这篇文章主要介绍了python小球落地问题及解决(递归函数),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  10. 解决python递归函数及递归次数受到限制的问题

    这篇文章主要介绍了解决python递归函数及递归次数受到限制的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部