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個斐波那契數,在第二個例子中,使用匿名函式和快取,在第三個例子中,遞迴計算數字的階乘。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP