Golang中递归的应用与实践
Golang中递归的应用与实践 递归示例
3 回复
更多关于Golang中递归的应用与实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
请参阅 应用递归
在Go语言中,递归是一种函数调用自身的技术,常用于解决分治、树形结构遍历等问题。以下是一个计算阶乘的经典递归示例:
package main
import "fmt"
func factorial(n int) int {
if n <= 1 {
return 1
}
return n * factorial(n-1)
}
func main() {
result := factorial(5)
fmt.Println("5! =", result) // 输出: 5! = 120
}
另一个常见示例是斐波那契数列计算:
func fibonacci(n int) int {
if n <= 1 {
return n
}
return fibonacci(n-1) + fibonacci(n-2)
}
func main() {
for i := 0; i < 10; i++ {
fmt.Printf("%d ", fibonacci(i))
}
// 输出: 0 1 1 2 3 5 8 13 21 34
}
对于目录遍历这种实际应用场景:
import (
"fmt"
"os"
"path/filepath"
)
func walkDir(dir string, indent string) {
entries, err := os.ReadDir(dir)
if err != nil {
return
}
for _, entry := range entries {
fmt.Println(indent + entry.Name())
if entry.IsDir() {
walkDir(filepath.Join(dir, entry.Name()), indent+" ")
}
}
}
func main() {
walkDir(".", "")
}
递归需要明确的终止条件,否则会导致栈溢出。在Go中,递归深度受限于调用栈大小,对于深度递归问题建议使用迭代或尾递归优化(Go编译器目前不自动优化尾递归)。

