22、Go 函数- 递归函数

作者: 温新

分类: 【Go基础】

阅读: 556

时间: 2023-08-29 15:53:48

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
    }
}
请登录后再评论