Golang 递归匿名函数
在这个Go语言的文章中,我们将编写程序通过生成斐波那契数列,使用缓存来实现递归匿名函数,以及计算一个数字的阶乘。
匿名函数是一个没有名称的函数,在其自身的主体内调用自身,当进行重复调用时,称之为递归函数。
方法1
在这个示例中,我们将使用一个匿名函数来递归地生成斐波那契数列。在这里,fibo被赋值为一个带有func和一个输入参数的匿名函数。
步骤
- 步骤1 - 创建一个main包,并在程序中声明fmt(格式化包)包,main包产生可执行代码,fmt包用于格式化输入和输出。
-
步骤2 - 创建一个main函数,在该函数内进一步创建一个带有一个参数n的匿名函数fibo,该参数表示要计算的斐波那契数的位置。
-
步骤3 - 该算法递归地设置了基本条件,即如果n小于等于1,则返回n。
-
步骤4 - 按照fibo(n-1) + fibo(n-2)的递归模式继续进行,并持续迭代,直到满足基本条件。当成功执行基本条件时,将值返回到堆栈并按照语句进行相加。
-
步骤5 - 最后,使用fmt包中的Println函数在控制台上生成并打印最终输出。
示例
以下是用生成斐波那契数列来实现递归匿名函数的golang程序。
package main
import "fmt"
func main() {
var fibo func(n int) int
fibo = func(n int) int {
if n <= 1 {
return n
}
return fibo(n-1) + fibo(n-2)
}
fmt.Println("The fibonacci number at location 6th is:")
fmt.Println(fibo(6)) // output: 8
}
输出
The fibonacci number at location 6th is:
8
方法2
在这种方法中,缓存被用来存储前面计算过的斐波那契数,一旦得到输出,它将被存储在缓存中并返回。
步骤
- 步骤1 - 创建一个main包,并在程序中声明fmt(格式化包),其中main产生可执行代码,fmt帮助格式化输入和输出。
-
步骤2 - 创建一个闭包,它将返回具有输入n表示第n个斐波那契数的函数。
-
步骤3 - 在函数中使用make内置函数创建缓存,用于存储前面计算的斐波那契数。
-
步骤4 - 内部的fib函数是一个递归的匿名函数,直到满足基本条件时才会被递归执行。
-
步骤5 - 计算后的输出被存储在缓存中并返回给函数。
-
步骤6 - 使用fmt包的Println函数打印输出,其中ln表示换行。
示例
以下是用缓存实现递归匿名函数的Golang程序。
package main
import "fmt"
func main() {
fibo := func() func(int) int {
cache := make(map[int]int)
var fib func(int) int
fib = func(n int) int {
if n <= 1 {
return n
}
if val, ok := cache[n]; ok {
return val
}
cache[n] = fib(n-1) + fib(n-2)
return cache[n]
}
return fib
}()
fmt.Println("The fibonacci number at the location 6th is:")
fmt.Println(fibo(6))
}
输出
The fibonacci number at the location 6th is:
8
方法3
在这个方法中,我们将编写一个Go语言程序,通过计算一个数的阶乘来实现递归匿名函数。
步骤
- 第1步 - 创建一个主包并在程序中声明fmt(格式化包)包,其中主要负责生成可执行代码,而fmt则帮助格式化输入和输出。
-
第2步 - 在主函数中创建一个匿名函数,其类型为整数类型的阶乘。
-
第3步 - 在该函数中运行匿名函数,检查输入的值是否等于0,如果是则返回1。
-
第4步 - 如果值不为零,则递归运行函数以找到该数的阶乘。
-
第5步 - 然后,使用要计算阶乘的输入参数调用该函数。
-
第6步 - 使用fmt包中的Println函数在控制台上打印阶乘,其中ln表示换行。
示例
以下是实现使用阶乘计算一个数的递归匿名函数的Golang程序:
package main
import "fmt"
func main() {
var factorial func(int) int
factorial = func(val int) int {
if val == 0 {
return 1
}
return val * factorial(val-1)
}
output := factorial(6)
fmt.Println("The factorial of the given number is:")
fmt.Println(output)
}
输出
The factorial of the given number is:
720
结论
我们编译并执行了实现递归匿名函数的程序。在第一个示例中,使用匿名函数计算第n个斐波那契数,第二个示例中,使用缓存和匿名函数,第三个示例中,递归地计算一个数的阶乘。