递归就是指在函数本身的内部又调用自己, 如:
func f { // 声明f函数
println("我将调用自己")
f() // 在函数内部调用自己
}
go语言支持递归, 和其它语言的递归一样, 必须设置函数退出条件, 否则就成了死递归
求阶乘:
func main() {
var result = f(4)
fmt.Println(result)
}
func f(i uint32) (res uint32) { // 函数功能是求某个正数的阶乘
if i > 1 {
res = i * f(i-1) // 4! = 4*3! = 4*3*2! = 4*3*2*1! = 4*3*2*1
} else { // 如果传入的值为1, 则直接返回1
res = 1
}
return res
}
斐波那契数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
例, 求斐波那契数列的第10项
func main() {
fmt.Println(f(10)) // 结果55
}
func f(n int) (res int) {
if n < 2 {
return n
}
return f(n-1) + f(n-2) // f(10) = f(9) + f(8) (分别计算f(9)和f(8))
}
如果要打印出数列前N项, 则使用一个循环, 即循环调用N次此函数