Go 语言递归函数
封面图
•
2025-10-05
•
Go
0
0
0
0
在 Go 语言(Golang)中,**递归函数**是指一个函数在其定义中调用自身。递归通常用于解决可以分解为更小、相似子问题的问题,例如阶乘计算、斐波那契数列、树的遍历等。 --- ## ✅ 递归的基本结构 一个递归函数必须包含以下两个部分: 1. **基准情形(Base Case)**:当满足某个条件时,停止递归,直接返回结果。 2. **递归情形(Recursive Case)**:函数调用自身,但参数逐渐接近基准情形。 --- ## 🧠 示例 1:计算阶乘 ```go package main import "fmt" func factorial(n int) int { if n == 0 { // 基准情形 return 1 } return n * factorial(n-1) // 递归情形 } func main() { fmt.Println(factorial(5)) // 输出 120 } ``` --- ## 🧠 示例 2:斐波那契数列 ```go package main import "fmt" func fibonacci(n int) int { if n <= 1 { return n } return fibonacci(n-1) + fibonacci(n-2) } func main() { fmt.Println(fibonacci(10)) // 输出 55 } ``` > ⚠️ 注意:这个版本的斐波那契数列效率较低,因为会重复计算很多子问题。实际应用中可以使用记忆化(memoization)或动态规划优化。 --- ## 🧠 示例 3:打印数字的每一位 ```go package main import "fmt" func printDigits(n int) { if n > 0 { printDigits(n / 10) fmt.Print(n % 10, " ") } } func main() { printDigits(12345) // 输出: 1 2 3 4 5 } ``` --- ## 📌 注意事项 - **递归深度限制**:Go 语言默认对递归深度有限制,过深的递归可能导致栈溢出(stack overflow)。如果遇到这个问题,应考虑改用迭代方式。 - **避免无限递归**:确保每次递归调用都向基准情形靠近,否则会导致程序崩溃。 --- ## ✅ 总结 | 特性 | 描述 | |--------------|------| | 递归函数 | 函数调用自身 | | 基准情形 | 停止递归的条件 | | 递归情形 | 调用自身的逻辑 | | 应用场景 | 阶乘、斐波那契、树遍历、分治算法等 | 如果你有具体应用场景或想了解递归与迭代的对比,欢迎继续提问!
上一篇:
Go 语言指针
标题录入,一次不能超过6条
返回顶部
留言
留言
评论