【Go】Go 语言教程--Go 语言递归函数(十七)

旧城等待, 2023-10-13 19:29 174阅读 0赞

往期回顾:

  • Go 语言教程–介绍(一)
  • Go 语言教程–语言结构(二)
  • Go 语言教程–语言结构(三)
  • Go 语言教程–数据类型(四)
  • Go 语言教程–语言变量(五)
  • Go 语言教程–GO语言常量(六)
  • Go 语言教程–GO语言运算符(七)
  • Go 语言教程–GO条件和循环语句(八)
  • Go 语言教程–GO语言函数(九)
  • Go 语言教程–GO语言变量作用域(十)
  • Go 语言教程–GO语言数组(十一)
  • Go 语言教程–GO语言指针(十二)
  • Go 语言教程–GO语言结构体(十三)
  • Go 语言教程–GO语言切片(Slice)(十四)
  • Go 语言教程–Go 语言范围(Range)(十五)
  • Go 语言教程–Go 语言Map(集合)(十六)

文章目录

  • 前言
  • 阶乘
  • 斐波那契数列
  • 求平方根

前言

递归,就是在运行的过程中调用自己。

语法格式如下:

  1. func recursion() {
  2. recursion() /* 函数调用自身 */
  3. }
  4. func main() {
  5. recursion()
  6. }

Go 语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。

递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等。

阶乘

以下实例通过 Go 语言的递归函数实例阶乘:

实例

  1. package main
  2. import "fmt"
  3. func Factorial(n uint64)(result uint64) {
  4. if (n > 0) {
  5. result = n * Factorial(n-1)
  6. return result
  7. }
  8. return 1
  9. }
  10. func main() {
  11. var i int = 15
  12. fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
  13. }

以上实例执行输出结果为:

  1. 15 的阶乘是 1307674368000

斐波那契数列

以下实例通过 Go 语言的递归函数实现斐波那契数列:

实例

  1. package main
  2. import "fmt"
  3. func fibonacci(n int) int {
  4. if n < 2 {
  5. return n
  6. }
  7. return fibonacci(n-2) + fibonacci(n-1)
  8. }
  9. func main() {
  10. var i int
  11. for i = 0; i < 10; i++ {
  12. fmt.Printf("%d\t", fibonacci(i))
  13. }
  14. }

以上实例执行输出结果为:

  1. 0 1 1 2 3 5 8 13 21 34

求平方根

以下实例通过 Go 语言使用递归方法实现求平方根的代码:

实例

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func sqrtRecursive(x, guess, prevGuess, epsilon float64) float64 {
  6. if diff := guess*guess - x; diff < epsilon && -diff < epsilon {
  7. return guess
  8. }
  9. newGuess := (guess + x/guess) / 2
  10. if newGuess == prevGuess {
  11. return guess
  12. }
  13. return sqrtRecursive(x, newGuess, guess, epsilon)
  14. }
  15. func sqrt(x float64) float64 {
  16. return sqrtRecursive(x, 1.0, 0.0, 1e-9)
  17. }
  18. func main() {
  19. x := 25.0
  20. result := sqrt(x)
  21. fmt.Printf("%.2f 的平方根为 %.6f\n", x, result)
  22. }

以上实例中,sqrtRecursive 函数使用递归方式实现平方根的计算。

sqrtRecursive 函数接受四个参数:

  • x 表示待求平方根的数
  • guess 表示当前猜测的平方根值
  • prevGuess 表示上一次的猜测值
  • epsilon 表示精度要求(即接近平方根的程度)

递归的终止条件是当前猜测的平方根与上一次猜测的平方根非常接近,差值小于给定的精度 epsilon。

在 sqrt 函数中,我们调用 sqrtRecursive 来计算平方根,并传入初始值和精度要求,然后在 main 函数中,我们调用 sqrt 函数来求解平方根,并将结果打印出来。

执行以上代码输出结果为:

  1. 25.00 的平方根为 5.000000

发表评论

表情:
评论列表 (有 0 条评论,174人围观)

还没有评论,来说两句吧...

相关阅读