Go 语言递归函数学习笔记
什么是递归函数
递归函数是指在函数的定义中使用函数自身的方法。递归函数在编程中十分常见,特别是在处理树形数据结构时。类似于循环语句,递归函数也可以重复执行某个函数。
递归函数的基本原则
- 递归函数必须有一个终止条件, 避免死循环;
- 递归函数的实现过程中需要考虑边界和异常情况.
递归函数的基本语法
goCopy Codefunc recursion(args) type {
if (结束条件) {
// 终止递归
return xxx
} else {
// 递归调用函数自身
recursion(args)
}
}
实例——求斐波那契数列第n项
goCopy Codefunc 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 Codefunc 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 语言递归函数的学习笔记,希望对大家有所帮助。