首页 > 编程笔记 > Go语言笔记 阅读:10

Go语言递归函数的用法(附带实例)

递归函数是函数在自身的函数体内调用自身,使用递归函数时一定要当心,处理不当将使程序进入无限循环。

递归函数经常用于解决一些数学问题,如计算数字的阶乘、生成斐波那契数列等。

递归函数的基本语法格式如下:
func 函数名([参数 1]) [返回类型]{
    函数名([参数 2])
}
例如,使用递归函数计算 10 的阶乘 10! 的值,其中 10!=1098!,而 9!=987!,以此类推,最后 1!=1,这样的数学公式可以使用递归函数进行描述,使用 f(n) 表示 n! 的值:
代码如下:
package main

import "fmt"

func f(num int) int { // 定义递归函数
    if num <= 1 { // 如果参数 num 的值小于或等于 1 // 则返回 1
        return 1
    } else { // 递归调用
        return f(num-1) * num // 返回 num * f(num-1)
    }
}

func main() {
    n := 10 // 调用递归函数
    result := f(n) // 调用递归函数
    fmt.Printf("%d!的结果为:%d", n, result) // 输出结果
}
运行结果如下。

10!的结果为:3628800

在定义递归函数时需要两个必要条件:
【实例】输出指定长度的斐波那契数列。
斐波那契数列又称黄金分割数列,它是由意大利数学家列昂纳多·斐波那契提出的。斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34,... 从第 3 项开始,该数列的每一项都等于前两项之和。编写程序输出一段指定长度的斐波那契数列。代码如下:
package main

import (
  "fmt"
)

func recursion(n int) int { // 定义递归函数
  if n <= 2 { // 第一项和第二项 // 直接返回 1
    return 1
  }
  return recursion(n-1) + recursion(n-2) // 递归,计算前两项的和
}

func main() { // 定义数列长度
  n := 10 // 遍历输出数列
  for i := 1; i <= n; i++ {
    fmt.Print(recursion(i), " ")
  }
}
运行结果如下:

1 1 2 3 5 8 13 21 34 55

在上述代码中,recursion() 函数是递归函数,参数 n 表示数列中的第几项:
在每次执行递归操作时,参数 n 逐渐减小,直到 n 小于或等于 2 时结束递归操作。

相关文章