函数内部调用函数自身的函数称为递归函数
使用递归函数最重要的三点:
- 递归就是自己调用自己。
- 必须先定义函数的退出条件,没有退出条件,递归将成为死循环。
- go语言递归函数很可能会产生一大堆的goroutine,也很可能会出现栈空间内存溢出问题。
go语言递归实例
阶乘
package main
import "fmt"
func a(n int) int {
//必须有退出条件
if n == 1 {
return 1
} else {
//自己调用自己
return n * a(n-1)
}
}
func main() {
i := a(6)
fmt.Printf("i: %v\n", i)
}
运行结果
i: 720
斐波那契数列
它的计算公式为f(n)=f(n-1)+f(n-2)且f(2)=f(1)=1
package main
import "fmt"
func a(n int) int {
//退出条件判断
if n == 1 || n == 2 {
return 1
}
//递归表达式
return a(n-1) + a(n-2)
}
func main() {
i := a(5)
fmt.Printf("i: %v\n", i)
}
运行结果
i: 5