一、基本介绍
一个函数在函数体内又调用了本身,我们称为递归调用
二、快速入门案例
package main
import (
"fmt"
)
func test(n int) {
if n > 2 {
n--
test(n)
} else {
fmt.Println("n=", n)
}
}
func main() {
test(4)
}
内存分析:
三、函数递归需要遵守的重要原则:
1、执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)
2、函数的局部变量是独立的,不会相互影响;如果希望各个函数栈使用同一个数据,则可以使用全局变量和引用传递(推荐)。
3、递归必须向退出递归的条件逼近,否则就是无限递归,变死龟了。
4、当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当函数执行完毕或者返回时,该函数本身也会被系统销毁
四、递归经典应用——斐波那契数
斐波那契数
(斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。注:0不是第一项,而是第零项)
请使用递归的方式,求出斐波那契数1,1,2,3,5,8,13…
给你一个整数n,求出它的斐波那契数是多少?
分析:
1、当n=1 和 n=2 时,斐波那契数数是1
2、从n=3开始,斐波那契数数是前两个数之和
代码示例:
package utils
/*
斐波那契数
(斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。注:0不是第一项,而是第零项)
请使用递归的方式,求出斐波那契数1,1,2,3,5,8,13...
给你一个整数n,求出它的斐波那契数是多少?
分析:
1、当n=1 和 n=2 时,斐波那契数数是1
2、从n=3开始,斐波那契数数是前两个数之和
*/
func Fbnqs(n int) int {
if n == 1 || n == 2 {
return 1
}else{
return Fbnqs(n-1) + Fbnqs(n-2)
}
}
主函数调用:
num := utils.Fbnqs(3)//斐波那契数列
fmt.Println(num)