Spe*_*her 13 recursion function go
我试图在Go中的另一个函数中定义一个递归函数,但我正在努力获得正确的语法.我正在寻找这样的东西:
func Function1(n) int {
a := 10
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
return Function2(n)
}
Run Code Online (Sandbox Code Playgroud)
我想将Function2保留在Function1的范围内,因为它正在访问其范围的某些元素.
我怎么能在Go中这样做?
非常感谢
icz*_*cza 33
Function2
如果它位于您声明它的行中,则无法访问它内部.原因是你不是指一个函数而是一个变量(它的类型是一个函数),它只能在声明之后才能访问.
在函数内声明的常量或变量标识符的范围从ConstSpec或VarSpec(短变量声明的ShortVarDecl)结束开始,并在最内层包含块的末尾结束.
在您的示例中Function2
是变量声明,VarSpec是:
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
Run Code Online (Sandbox Code Playgroud)
并且正如语言规范所描述的引用形式一样,变量标识符Function2
将仅在声明之后的范围内,因此您无法在声明本身内引用它.有关详细信息,请参阅了解Go中的变量范围.
首先声明Function2
变量,因此您可以从函数文字中引用它:
func Function1(n int) int {
a := 10
var Function2 func(m int) int
Function2 = func(m int) int {
if m <= a {
return a
}
return Function2(m - 1)
}
return Function2(n)
}
Run Code Online (Sandbox Code Playgroud)
在Go Playground尝试一下.
var Function2 func(m int) int
Function2 = func(m int) int {
...
Run Code Online (Sandbox Code Playgroud)