使用Golang实现递归匿名函数的程序
在这篇Go语言文章中,我们将编写程序来使用缓存生成斐波那契数列,实现阶乘包括使用递归匿名函数。
递归匿名函数是不具有名称的函数,它在其自身体内调用自身,当重复调用时,它被称为递归函数。
方法1
在此示例中,我们将使用匿名函数递归地生成斐波那契数列。这里,将fibo分配给使用func和一个输入参数的匿名函数。
算法
- 步骤1 − 创建一个“main”包,并在程序中声明“fmt”(格式化包)包,其中主要生成可执行代码,fmt 帮助格式化输入和输出。
-
步骤2 − 创建一个主函数,在该函数中使用一个参数为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("位置6的斐波那契数:")
fmt.Println(fibo(6)) // 输出:8
}
输出
位置6的斐波那契数:
8
方法2
在此方法中,专门使用缓存来存储Fibonacci数的先前计算,一旦接收到输出,它将存储在缓存中并返回。
算法
- 步骤1 − 创建一个“main”包,并在程序中声明“fmt”(格式化包)包,其中主要生成可执行代码,fmt 帮助格式化输入和输出。
-
步骤2 − 创建一个闭包,返回函数,带有输入n,表示n个Fibonacci数。
-
步骤3 − 在函数中创建缓存,使用内置make函数存储Fibonacci数的先前计算。
-
步骤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 − 创建一个 package main,并在程序中声明 fmt(格式化包)的 package,其中 main 生成可执行代码,fmt 用于格式化输入和输出。
-
步骤 2 − 在其中创建一个 main 函数,在该函数中定义一种 int 类型的阶乘为匿名函数。
-
步骤 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("给定数字的阶乘是:")
fmt.Println(output)
}
输出
给定数字的阶乘是:
720
结论
我们编译并执行了实现递归匿名函数的程序。在第一个示例中,使用匿名函数计算第 n 个斐波那契数,在第二个示例中,使用缓存和匿名函数,以递归方式计算数字的阶乘。