每一种编程语言都有递归调用,趁着自己学习 golang 的时候,复习一下递归的知识.
以下是一个简单的递归调用:
package main
import "fmt"
func test(n int8) {
if n > 2 {
n--
test(n)
}
fmt.Println("n = ", n)
}
func main() {
test(4)
}
我们可以简单分析一下他的执行流程.
个人觉得特别重要的一句话是:
当基线条件不再满足时,也就是我们上面的条件 n>2
不再满足时, 递归会慢慢一步步回到初始调用位置直到结束.
还有网上总结了四点建议,也一并附上:
- 执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)
- 函数的局部变量是独立的,不会相互影响
- 递归必须向退出递归的函数条件逼近,否则就是无限递归.
- 当一个函数执行完毕时,或是遇到 return ,就会返回,遵守谁调用,就将结果返回给谁,同时当函数执行完毕或是返回时.该函数本身也会被系统销毁.