零基础 go - 31(函数 - 递归调用)

6 阅读1分钟

一个函数在其函数体内调用了自身,我们成为递归调用

  • 递归调用需要一个明确的结束条件,否则会导致无限调用,最终引发栈溢出错误。

  • 执行一个函数时,就创建了一个新的执行上下文(包含函数的参数、局部变量等)。当函数调用自身时,会创建一个新的执行上下文并压入调用栈。当达到结束条件时,函数开始返回,逐层弹出执行上下文,直到回到最初的调用点。

  • 函数的局部变量都是独立的,不会相互影响

  • 当一个函数执行完毕,遇到 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)
}