zoukankan      html  css  js  c++  java
  • 链式 add 函数

    写在前面

    这是面试中问到的一个问题,明明很简单的递归,但是有些细节没做到,就思路是对的,但具体没实现成,因此,结束后又完善并实现了。

    问题如下

    实现一个链式 add 函数,当其接收的参数个数大于等于 3 个的时候,就返回其结果,如果接收的参数不够 3 个时,就返回函数再次继续接收参数。

    测试用例:

    add(2,3,4)  =>  9
    add(2)(3,4) =>  9
    add(2)(3)(4)  =>  9
    add(2,3)(4,5)  =>  14
    

    1. 解题方法

    解决思路就是以参数的长度大于等于 3 为出口,当参数长度不足 3 时就返回一个函数,在该函数内再次调用 add 函数,调用的时候将之前的参数传递过去

    function add(){
        if(arguments.length >= 3){
            let sum = 0
            for(let i = 0; i < arguments.length; i++){
                sum += arguments[i]
            }
            return sum
        }
        let last = arguments
        return function(){
            return add.apply(this, [...last].concat([...arguments]))
        }
    }
    

    2. 注意要点

    当时之所有没有实现出来有如下几点细节没有注意到:

    1. 调用函数想传递完整的 arguments 时,需要使用 fn.apply(this, [...arguemnts])

    2. arguments 不能写在函数形参里,在非箭头函数内部直接获取,若写在了函数形参里就成了函数中第一个参数的变量名了,就只是代表一个形参了。

    3. 返回的函数中也要有返回值,递归函数都要有返回值。

  • 相关阅读:
    eclipse安装m2e
    Ubuntu安装Maven(转)
    父亲节点的实现
    vscode go linux 依赖包
    golang DHCPv4/v6 demo
    解决golang.org模块无法下载的问题
    go 网络数据包分析(3)
    go 网络数据包分析(2)
    Go语言:判断IP是否合法是IPv4还是IPv6
    go IP地址转化为二进制数
  • 原文地址:https://www.cnblogs.com/lovevin/p/13622204.html
Copyright © 2011-2022 走看看