亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸函數類型定義

遞歸函數類型定義

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 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號