函数递归就是一个 函数 在函数体内又调用了自身,我们称为函数的递归调用。
func funcName(param paramType){
if (param == cond){
return
}
funcName(param2)
}
我们定义了一个函数 funcName,该函数传递一个 参数,接着,在函数体里面我们使用 if 判断 当参数满足一定的条件,就直接 return,否则则继续调用函数自己。
这里的 if 条件就是函数递归的出口,这个非常重要,如果没有这个递归的出口,那么这个递归就会一直执行下去。
Go 语言 函数递归结束条件
package main
import (
"fmt"
)
func printNum(num int){
if num > 2{
num--
printNum(num)
}
fmt.Println("Num =", num)
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//Go语言 函数递归结束条件
printNum(4)
}
程序运行后,控制台输出如下:
我们定义了一个 printNum 函数,该函数的参数是 int 类型 的数字,在函数体里面我们使用 if 判断,如果当前参数的值大于 2 的话,我们就首先将当前参数的值减一,然后再次调用自己。
如果当前参数的值不大于 2 的话,那么就打印当前参数的值。这里的 if 条件里面的逻辑就是函数 printNum 自己调用自己,这就构成了递归调用。同时不满足 if 条件的情况,就是递归调用的出口。
Go 语言函数递归,实现求阶乘
package main
import (
"fmt"
)
func Factorial(n uint64) (result uint64) {
if n > 0 {
result = n * Factorial(n-1)
return result
}
return 1
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//函数递归实现求阶乘
result := Factorial(5)
fmt.Println("Result =", result)
}
程序运行后,控制台输出如下:
我们定义了一个 Factorial 函数,该函数的参数是 uint64 的数字,在函数体里面我们使用 if 判断,如果当前参数的值大于 0 的话,我们就再次调用自己,并且参数的值是当前值减一,最后返回计算的结果。
如果当前参数的值不大于 0 的话,那么就直接返回 1。这里的 if 条件里面的逻辑就是函数 Factorial 自己调用自己,这就构成了递归调用。同时不满足 if 条件的情况,就是递归调用的出口。
Go 语言函数递归,实现斐波那契数列
package main
import (
"fmt"
)
func fibonacci(num int) (result int) {
if num <= 1 {
result = 1
} else {
result = fibonacci(num-1) + fibonacci(num-2)
}
return
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//函数递归实现斐波那契数列
result := fibonacci(5)
fmt.Println("Result =", result)
}
程序运行后,控制台输出如下:
我们定义了一个 fibonacci 函数,该函数的参数是 int,返回值 也是 int,在函数体里面我们使用 if 判断,如果当前参数的值小于等于 1 的话,那么我们就将结果赋值为 1,否则我们就再次调用自己。
函数递归就是一个函数在函数体内又调用了自身,我们称为函数的递归调用。函数递归最重要的就是一定要找到递归调用的出口。