Golang | 递归函数
递归
递归,说白了就是直接或者间接的调用自己的一种算法。它是把求解问题转化为规模较小的子问题,然后通过多次递归一直到可以得出结果的最小解,然后通过最小解逐层向上返回调用,最终得到整个问题的解。总之递归可以概括为一句话就是:“能进则进,不进则退”。
递归的三要素
- 确定递归函数的参数据和返回值
- 确定终止条件
- 确定单层递归的逻辑
简单的小例子
求一个数字的阶乘:
import "fmt"
func factorial(i int) int {
if i <= 1 {
return 1
}
return i * factorial(i-1)
}
func main() {
var i int = 10
fmt.Printf("Factorial of %d is %d\n", i, factorial(i))
// Factorial of 10 is 3628800
}
终止条件:
if i <= 1 {
return 1
}
确定递归函数的参数据和返回值:
func factorial(i int) int
确定单层递归的逻辑:
return i * factorial(i-1)
斐波那契数列(Fibonacci)
import "fmt"
func fibonacci(i int) int {
if i == 0 {
return 0
}
if i == 1 {
return 1
}
return fibonacci(i-1) + fibonacci(i-2)
}
func main() {
for i := 0;i < 10;i++{
fmt.Printf("第 %v 次,值为:%v \n",i,fibonacci(i))
}
//第 0 次,值为:0
//第 1 次,值为:1
//第 2 次,值为:1
//第 3 次,值为:2
//第 4 次,值为:3
//第 5 次,值为:5
//第 6 次,值为:8
//第 7 次,值为:13
//第 8 次,值为:21
//第 9 次,值为:34
}
关注公众号,随时获取最新资讯
细节决定成败!
个人愚见,如有不对,恳请斧正!