猿问

递归函数类型定义

我对这个递归类型定义在这里发生了什么感到有点困惑:


type Func func() (int, int, Func)

注意:我知道如何通过反复试验来使用它,但我非常不确定它(递归类型定义)是什么。


package main


import "fmt"


func fib(x int) int {

    if x == 0 {

        return 0

    } else if x == 1 {

        return 1

    } else {

        return fib(x-1) + fib(x-2)

    }

}


type Func func() (int, int, Func)


func get_fib(x int) (int, int, Func) {

    return x, fib(x), func() (int, int, Func) { return get_fib(x + 1) }

}


func main() {

    d, n, f := get_fib(10)

    d1, n1, f1 := f()

    d2, n2, _ := f1()

    fmt.Println(d, n)

    fmt.Println(d1, n1)

    fmt.Println(d2, n2)

}

任何人都可以阐明在上面的递归类型定义中创建的内容吗?


翻阅古今
浏览 111回答 1
1回答

慕尼黑的夜晚无繁华

typeFunc func() (int, int, Func)只是一个函数类型,其类型名称是Func. 您可以将其视为具有零参数和 3 个返回值的匿名函数(最后一个返回值也是 Func 类型)。当将某个变量分配给此函数类型(Func)时,该变量将是此函数的名称。然后你可以调用以变量名作为函数名的函数。在上面的代码中,d, n, f := get_fib(10), d get 10, n get fib(10), fu get func() (int, int, Func) { return get_fib(11) }。然后就可以直接调用f()which 返回结果了get_fib(11)。==============================================================为什么需要递归类型来创建此功能:只是我的想法:get_fib 函数要返回三个结果:x,fib 函数的输入(int 类型),fib 函数的结果(int 类型),返回 get_fib(x+1) 函数的函数(func 类型) ,现在不是 Func)。(所以 get_fib 也是一种递归,因为它在返回中使用了 get_fib。)由于函数(类型为 func,现在不是 Func)返回一个 get_fib(x+1) ,其返回类型与 get_fib(x) 的返回类型相同. 所以函数的返回类型应该是int, int, func(func 是 get_fib 返回的第三个结果,它是函数定义本身)。所以需要递归函数类型。简而言之:get_fib 的输出是 (int, int, customfunc)customfunc 的输出是 (get_fib) 又是 (int, int, customfunc )。所以 customfunc 的输出是 (int, int, customfunc) 这是一个递归函数类型
随时随地看视频慕课网APP

相关分类

Go
我要回答