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

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.