在 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)

}

我想将 Function2 保留在 Function1 的范围内,因为它正在访问其范围的某些元素。


我怎样才能在 Go 中做到这一点?


忽然笑
浏览 271回答 2
2回答

Helenr

Function2如果它位于您声明它的行中,则您无法访问它内部。原因是您指的不是函数而是变量(其类型是函数),并且只有在声明之后才能访问它。引用规范:声明和范围:在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。在您的示例中Function2是一个变量声明,而 VarSpec 是:Function2 := func(m int) int {&nbsp; &nbsp; if m <= a {&nbsp; &nbsp; &nbsp; &nbsp; return a&nbsp; &nbsp; }&nbsp; &nbsp; return Function2(m-1)}正如语言规范所描述的引用形式,变量标识符Function2只会在声明之后的范围内,所以你不能在声明本身内部引用它。有关详细信息,请参阅了解 Go 中的变量范围。首先声明Function2变量,以便您可以从函数字面量中引用它:func Function1(n int) int {&nbsp; &nbsp; a := 10&nbsp; &nbsp; var Function2 func(m int) int&nbsp; &nbsp; Function2 = func(m int) int {&nbsp; &nbsp; &nbsp; &nbsp; if m <= a {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return a&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return Function2(m - 1)&nbsp; &nbsp; }&nbsp; &nbsp; return Function2(n)}在Go Playground上试试。

慕姐4208626

var Function2 func(m int) intFunction2 = func(m int) int {&nbsp; &nbsp; ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go