美文网首页
golang 嵌套匿名函数实现递归 2020-07-16 (未允

golang 嵌套匿名函数实现递归 2020-07-16 (未允

作者: 9_SooHyun | 来源:发表于2020-07-16 17:10 被阅读0次

这两天golang刷题碰到个需求,需要在递归调用中不断修改一个共享变量。但是go的变量只能在函数体内赋值的,我如果在递归函数体内给它赋值的话,那递归过程中就会疯狂赋值,这不对的。。。

于是,我搞了另外一个函数 f ,在 f 里面对共享变量赋值,然后 f 内调用递归函数,并把这个共享变量的指针传给递归函数,比较丑陋地实现了。。。递归函数还得带个共享变量的指针

func f() {
    var share = 0
    recursion(20, &share)
    fmt.Print(share)
}

func recursion(n int, p *int) int {
    (*p) ++
    if n <= 1 {
        return n
    }
    return recursion(n-1) + recursion(n-2)
}

下面看下比较优美的实现

go递归函数修改共享变量

递归函数recursion()作为匿名函数,嵌套到一个外部函数outer()中。共享变量作为outer的local变量,同时作为recursion()的enclosure变量,从而实现在每一次递归时都可以修改到

func outer() {
    var share = 0
    recursion := func(n int) int {
        share ++
        // 递归出口
        if n <= 1 {
            return n
        }
        return recursion(n-1) + recursion(n-2)
    }
    recursion(20)
    fmt.Print(share)
}
// 报错
// # command-line-arguments
// .\main.go:164:10: undefined: recursion。原因是return recursion(n-1) + recursion(n-2)时,recursion未定义,那么我们先声明它一下就没问题了

更正:

func outer() {
    var share = 0
    var recursion func(n int) int
    recursion = func(n int) int {
        share++
        // 递归出口
        if n <= 1 {
            return n
        }
        return recursion(n-1) + recursion(n-2)
    }
    recursion(20)
    fmt.Print(share)
}

相关文章

  • golang 嵌套匿名函数实现递归 2020-07-16 (未允

    这两天golang刷题碰到个需求,需要在递归调用中不断修改一个共享变量。但是go的变量只能在函数体内赋值的,我如果...

  • 2018-10-17 018 函数Def B

    今天写一写函数的(相对)高级用法,主要是递归、嵌套、作用域和匿名函数的东西; 函数嵌套 函数在定义时,内部可以再写...

  • JavaScript实现Y组合子函数

    什么是Y组合子函数? 通俗来讲就是用来解决匿名递归函数实现的。 实现过程 我们知道,具名递归函数可以直接通过函数名...

  • Golang基础(五)——函数二

    Golang基础(五)——函数二 @([07] golang)[Go总结] 匿名函数 匿名函数就是将一个函数直接赋...

  • 匿名函数的递归

    匿名函数的递归实际是将匿名函数作为参数,传入另一个函数实现的。参考资料 The Y Combinator (Sli...

  • python语法(六)

    递归 计算阶乘:递归函数一定要设置结束条件,否则就会死掉 匿名函数 匿名函数作为实参 把匿名函数当参数传入,pyt...

  • python学习_day10

    匿名函数和递归函数的使用

  • 递归函数 & 匿名函数

    递归函数:一个函数可以调用其他函数如果一个函数在内部不调用其他的函数,而是自己本身的话,这个函数就是递归函数编程语...

  • Python札记20_递归、传递

    在Python中函数也是一种对象,有几种特别的应用: 递归函数 传递函数 嵌套函数 递归 递归又称为递回,是指在函...

  • Golang递归函数、函数类型、匿名函数和闭包

    1. 递归函数 递归指函数可以直接或间接的调用自身。 递归函数通常有相同的结构:一个跳出条件和一个递归体。所谓跳出...

网友评论

      本文标题:golang 嵌套匿名函数实现递归 2020-07-16 (未允

      本文链接:https://www.haomeiwen.com/subject/xoxmhktx.html