22、Go 函数- 递归函数
hi,我是温新
什么是递归函数
当一个函数在其函数体内调用自身,则称之为递归。也就是说,函数在运行过程中自己调用自己。
注意:使用递归函数时,一定要有终止条件,否则递归将进入无限循环,知道内存溢出。
递归函数语法格式
func main () {
recursion()
}
func recursion() {
recursion() // 自己调用自己
}
递归函数案例
1、阶乘
package main
import "fmt"
func main() {
var i int = 3
fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}
func Factorial(n uint64) (result uint64) {
if n > 0 {
result = n * Factorial(n-1)
return result
}
return 1
}
2、斐波那契
package main
import "fmt"
func main() {
i := 15
fmt.Printf("%d 的阶乘是 %d\n", i, Fibonacci(uint64(i)))
}
func Fibonacci(n uint64) uint64 {
if n == 0 {
return 0
} else if n == 1 {
return 1
} else {
return Fibonacci(n-1) + Fibonacci(n-2)
}
}
3、猴子吃桃问题
有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中的一半,然后再多吃一个。当到第十天时,想再吃时(还没吃),发现只有1个桃子了。问题:最初共多少个桃子?
package main
import "fmt"
func main() {
fmt.Printf("桃子 %d", Moneky(8))
}
func Moneky(day int) int {
if day > 10 || day < 1 {
return 0
} else if day == 10 {
return 1
} else {
// 桃子的数量
num := (Moneky(day+1) + 1) * 2
return num
}
}
请登录后再评论