Golang 递归匿名函数

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程