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编译器目前不自动优化尾递归)。

回到顶部