Go 语言递归函数学习笔记

什么是递归函数

递归函数是指在函数的定义中使用函数自身的方法。递归函数在编程中十分常见,特别是在处理树形数据结构时。类似于循环语句,递归函数也可以重复执行某个函数。

递归函数的基本原则

  • 递归函数必须有一个终止条件, 避免死循环;
  • 递归函数的实现过程中需要考虑边界和异常情况.

递归函数的基本语法

goCopy Code
func recursion(args) type { if (结束条件) { // 终止递归 return xxx } else { // 递归调用函数自身 recursion(args) } }

实例——求斐波那契数列第n项

goCopy Code
func fib(n uint64) uint64 { if n <= 1 { return n } return fib(n-1) + fib(n-2) }

实例——遍历文件目录

goCopy Code
// 使用 ioutil 读取所有文件及子目录 func readDir(dirPath string) { fileList, err := ioutil.ReadDir(dirPath) if err != nil { panic(err) } for _, file := range fileList { if file.IsDir() { fmt.Println("dir: ", file.Name()) readDir(dirPath + "/" + file.Name()) } else { fmt.Println("file: ", dirPath+"/"+file.Name()) } } }

实例——汉诺塔问题

goCopy Code
func hanoi(n int, a string, b string, c string) { if n == 1 { fmt.Printf("%s -> %s\n", a, c) return } hanoi(n-1, a, c, b) // 将 n - 1 个盘子从 A 移到 B fmt.Printf("%s -> %s\n", a, c) // 将第 n 个盘子从 A 移到 C hanoi(n-1, b, a, c) // 将 n - 1 个盘子从 B 移到 C }

以上是 Go 语言递归函数的学习笔记,希望对大家有所帮助。