为了账号安全,请及时绑定邮箱和手机立即绑定

递归函数类型定义

递归函数类型定义

Go
翻阅古今 2022-11-28 14:51:02
我对这个递归类型定义在这里发生了什么感到有点困惑:type Func func() (int, int, Func)注意:我知道如何通过反复试验来使用它,但我非常不确定它(递归类型定义)是什么。package mainimport "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)}任何人都可以阐明在上面的递归类型定义中创建的内容吗?
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

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) 这是一个递归函数类型


查看完整回答
反对 回复 2022-11-28
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信