Return recursive anonymous functions in golang

huangapple go评论79阅读模式
英文:

Return recursive anonymous functions in golang

问题

我想要能够在golang中返回一个递归的匿名函数。我已经使用了下面的代码片段。
在这里,foo()不起作用,因为匿名函数无法引用自身。
bar()按预期工作。

如果可能的话,应该如何正确实现这个功能呢?

package main

import (
	"fmt"
)

func foo() func(int) int {
	var f func(int) int
	f = func(x int) int {
		if x == 1 {
			return 1
		}
		return x * f(x-1)
	}
	return f
}

func bar() func(int) int {
	return func(x int) int {
		return x * 100
	}
}

func main() {
	a := foo()
	b := bar()
	fmt.Println(a(5))
	fmt.Println(b(5))
}

在foo()函数中,我们声明了一个变量f,它是一个函数类型。然后,我们将匿名函数赋值给f,并在匿名函数内部使用f来递归调用自身。这样,匿名函数就能够引用自身了。

英文:

I want to be able to return a recursive anonymous function in golang. I have used the code snippet below.
Here foo() doesn't work because the anonymous function has no way of referring to itself.
bar() works as expected.

What would be the right way of doing this, if at all possible?

package main

import (
	"fmt"
)

func foo() func(int) int {
	return func(x int) int {
		if x == 1 {
			return 1
		}
		return x * func(x-1) // this is where the problem lies
	}
}
func bar() func(int) int {
	return func(x int) int {
		return x * 100 
	}
}

func main() {

    a:= foo()
    b:= bar()
	fmt.Println(a(5))
	fmt.Println(b(5))

}

答案1

得分: 6

你可以先声明 f

func foo() func(int) int {
    var f func(x int) int
    f = func(x int) int {
        if x == 1 {
            return 1
        }
        return x * f(x-1) 
    }
   return f
}
英文:

You can declare f first:

func foo() func(int) int {
    var f func(x int) int
    f = func(x int) int {
        if x == 1 {
            return 1
        }
        return x * f(x-1) 
    }
   return f
}

huangapple
  • 本文由 发表于 2021年6月10日 23:57:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/67924660.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定