我正在尝试在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中执行此操作?
非常感谢
Function2
如果它在声明它的行中,则无法访问它的内部。原因是您不是在指 函数, 而是指 变量 (类型是函数),并且只有在声明后才能访问它。
引用规格:声明和范围:
在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并在最里面的包含块的末尾结束。
在您的示例中Function2
是一个变量声明,而VarSpec是:
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
而且,正如语言规范所描述的引号形式一样,变量标识符Function2
将仅在声明之后的范围内,因此您不能在声明本身内引用它。
首先声明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)
}
在Go Playground上尝试一下。
Go语言支持递归函数,这里是一个经典的斐波拉切数列的列子。 package main import "fmt" // fact函数不断地调用自身,直到达到基本状态fact(0) func fact(n int) int { if n == 0 { return 1 } return n * fact(n-1) } func main() { fmt.
我正在从事一个基于C中自定义数据结构list\t的项目。这是可以帮助我操作这个list\t的预定义函数,我被要求编写的函数叫做insert\u list(list\u t,list\u t,int),它是尾部递归的。 我要编写的insert_list()函数接受两个输入,类型为list_t和一个保证不大于第一个list_t大小的额外整数n,并返回另一个list_t,其中包含第一个list_t中的前
主要内容:斐波那契数列,数字阶乘,多个函数组成递归很对编程语言都支持递归函数,Go语言也不例外,所谓递归函数指的是在函数内部调用函数自身的函数,从数学解题思路来说,递归就是把一个大问题拆分成多个小问题,再各个击破,在实际开发过程中,递归函数可以解决许多数学问题,如计算给定数字阶乘、产生斐波系列等。 构成递归需要具备以下条件: 一个问题可以被拆分成多个子问题; 拆分前的原问题与拆分后的子问题除了数据规模不同,但处理问题的思路是一样的; 不能无限制的
递归,就是在运行的过程中调用自己。 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } Go 语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。 递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等。 阶乘 以下实
问题内容: 我有一个计算税金的函数。 我不明白为什么它不能停止递归。 问题答案: 在您的职能部门中: 您没有从函数或设置中返回值。当您不返回任何内容时,返回值为。 也许,您想要这样:
函数是Go语言的重要内容。 package main import "fmt" // 这个函数计算两个int型输入数据的和,并返回int型的和 func plus(a int, b int) int { // Go需要使用return语句显式地返回值 return a + b } func main() { // 函数的调用方式很简单 // "名称(参数列表)"