Go语言实现递归匿名函数的程序


在这篇Go语言文章中,我们将编写程序来实现递归匿名函数,通过生成斐波那契数列、使用缓存以及计算数字的阶乘来演示。

匿名函数是没有名称的函数,它在其自身的主体内部调用自身,当重复调用时,称为递归函数。

方法一

在这个例子中,我们将使用匿名函数递归地生成斐波那契数列。这里,fibo被赋值给一个带有func关键字和一个输入参数的匿名函数。

算法

  • 步骤1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行代码,fmt帮助格式化输入和输出。

  • 步骤2 − 创建一个main函数,在这个函数中,进一步创建一个名为fibo的匿名函数,它带有一个参数n,表示要计算的斐波那契数列的位置。

  • 步骤3 − 算法递归设置,基本条件是检查n是否小于等于1,如果是则返回n。

  • 步骤4 − 遵循fibo(n-1) + fibo(n-2)的递归模式,并持续进行,直到基本条件满足。当基本条件成功执行时,返回堆栈中的值,并根据语句将它们相加。

  • 步骤5 − 最后,生成最终输出,并使用fmt包中的Println函数将其打印到控制台。

示例

以下是使用Go语言实现递归匿名函数生成斐波那契数列的程序。

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

方法二

在这种方法中,使用缓存专门存储斐波那契数列的先前计算结果,一旦收到输出,它将存储在缓存中并返回。

算法

  • 步骤1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行代码,fmt帮助格式化输入和输出。

  • 步骤2 − 创建一个闭包,它将返回一个输入参数为n的函数,表示第n个斐波那契数。

  • 步骤3 − 在函数中,使用make内置函数创建一个缓存,用于存储斐波那契数列的先前计算结果。

  • 步骤4 − 内部fib函数是一个递归匿名函数,它将递归执行,直到满足基本条件。

  • 步骤5 − 计算后的输出存储在缓存中并返回给函数。

  • 步骤6 − 使用fmt包中的Println函数打印输出,其中ln表示换行。

示例

以下是使用缓存的Go语言实现递归匿名函数的程序。

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

方法三

在这种方法中,我们将编写一个Go语言程序来实现递归匿名函数,计算一个数字的阶乘。

算法

  • 步骤1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行代码,fmt帮助格式化输入和输出。

  • 步骤2 − 在main函数中定义一个int类型的阶乘匿名函数。

  • 步骤3 − 在匿名函数中检查输入值是否等于0,如果是则返回1。

  • 步骤4 − 如果值不为零,则递归运行该函数以查找该数字的阶乘。

  • 步骤5 − 然后,使用要计算其阶乘的输入参数调用该函数。

  • 步骤6 − 使用fmt包中的Println函数将阶乘打印到控制台,其中ln表示换行。

示例

以下是使用数字阶乘的Go语言实现递归匿名函数的程序。

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个斐波那契数,在第二个例子中,使用匿名函数和缓存,在第三个例子中,递归计算数字的阶乘。

更新于:2023年5月3日

浏览量:286

启动你的职业生涯

通过完成课程获得认证

开始学习
广告