一个函数在其函数体内调用了自身,我们成为递归调用
-
递归调用需要一个明确的结束条件,否则会导致无限调用,最终引发栈溢出错误。
-
执行一个函数时,就创建了一个新的执行上下文(包含函数的参数、局部变量等)。当函数调用自身时,会创建一个新的执行上下文并压入调用栈。当达到结束条件时,函数开始返回,逐层弹出执行上下文,直到回到最初的调用点。
-
函数的局部变量都是独立的,不会相互影响
-
当一个函数执行完毕,遇到 return就会返回结果并结束当前函数的执行,弹出当前函数的执行上下文,回到上一个函数的执行上下文继续执行。
备注
- 在做递归的时候,关键是要找到递归的结束条件和递归体
斐波那契数
- 递归函数:fib(n) = fib(n-1) + fib(n-2)
- 结束条件是 n <= 1 时返回 n
package main
// n <= 1时, 返回 n
// n > 1时,返回 fib(n-1) + fib(n-2)
func fib(n int) int {
if n <= 1 {
return n
}
return fib(n-1) + fib(n-2)
}