往期回顧:
- Go 語言教程–介紹(一)
- Go 語言教程–語言結(jié)構(gòu)(二)
- Go 語言教程–語言結(jié)構(gòu)(三)
- Go 語言教程–數(shù)據(jù)類型(四)
- Go 語言教程–語言變量(五)
- Go 語言教程–GO語言常量(六)
- Go 語言教程–GO語言運算符(七)
- Go 語言教程–GO條件和循環(huán)語句(八)
- Go 語言教程–GO語言函數(shù)(九)
- Go 語言教程–GO語言變量作用域(十)
- Go 語言教程–GO語言數(shù)組(十一)
- Go 語言教程–GO語言指針(十二)
- Go 語言教程–GO語言結(jié)構(gòu)體(十三)
- Go 語言教程–GO語言切片(Slice)(十四)
- Go 語言教程–Go 語言范圍(Range)(十五)
- Go 語言教程–Go 語言Map(集合)(十六)
前言
遞歸,就是在運行的過程中調(diào)用自己。
語法格式如下:
func recursion() {
recursion() /* 函數(shù)調(diào)用自身 */
}
func main() {
recursion()
}
Go 語言支持遞歸。但我們在使用遞歸時,開發(fā)者需要設(shè)置退出條件,否則遞歸將陷入無限循環(huán)中。
遞歸函數(shù)對于解決數(shù)學(xué)上的問題是非常有用的,就像計算階乘,生成斐波那契數(shù)列等。
階乘
以下實例通過 Go 語言的遞歸函數(shù)實例階乘:
實例
package main
import "fmt"
func Factorial(n uint64)(result uint64) {
if (n > 0) {
result = n * Factorial(n-1)
return result
}
return 1
}
func main() {
var i int = 15
fmt.Printf("%d 的階乘是 %d\n", i, Factorial(uint64(i)))
}
以上實例執(zhí)行輸出結(jié)果為:
15 的階乘是 1307674368000
斐波那契數(shù)列
以下實例通過 Go 語言的遞歸函數(shù)實現(xiàn)斐波那契數(shù)列:
實例
package main
import "fmt"
func fibonacci(n int) int {
if n < 2 {
return n
}
return fibonacci(n-2) + fibonacci(n-1)
}
func main() {
var i int
for i = 0; i < 10; i++ {
fmt.Printf("%d\t", fibonacci(i))
}
}
以上實例執(zhí)行輸出結(jié)果為:
0 1 1 2 3 5 8 13 21 34
求平方根
以下實例通過 Go 語言使用遞歸方法實現(xiàn)求平方根的代碼:
實例
package main
import (
"fmt"
)
func sqrtRecursive(x, guess, prevGuess, epsilon float64) float64 {
if diff := guess*guess - x; diff < epsilon && -diff < epsilon {
return guess
}
newGuess := (guess + x/guess) / 2
if newGuess == prevGuess {
return guess
}
return sqrtRecursive(x, newGuess, guess, epsilon)
}
func sqrt(x float64) float64 {
return sqrtRecursive(x, 1.0, 0.0, 1e-9)
}
func main() {
x := 25.0
result := sqrt(x)
fmt.Printf("%.2f 的平方根為 %.6f\n", x, result)
}
以上實例中,sqrtRecursive 函數(shù)使用遞歸方式實現(xiàn)平方根的計算。
sqrtRecursive 函數(shù)接受四個參數(shù):
- x 表示待求平方根的數(shù)
- guess 表示當(dāng)前猜測的平方根值
- prevGuess 表示上一次的猜測值
- epsilon 表示精度要求(即接近平方根的程度)
遞歸的終止條件是當(dāng)前猜測的平方根與上一次猜測的平方根非常接近,差值小于給定的精度 epsilon。
在 sqrt 函數(shù)中,我們調(diào)用 sqrtRecursive 來計算平方根,并傳入初始值和精度要求,然后在 main 函數(shù)中,我們調(diào)用 sqrt 函數(shù)來求解平方根,并將結(jié)果打印出來。文章來源:http://www.zghlxwxcb.cn/news/detail-592163.html
執(zhí)行以上代碼輸出結(jié)果為:文章來源地址http://www.zghlxwxcb.cn/news/detail-592163.html
25.00 的平方根為 5.000000
到了這里,關(guān)于【Go】Go 語言教程--Go 語言遞歸函數(shù)(十七)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!