給定一個(gè)正整數(shù)n計(jì)算出對(duì)應(yīng)斐波那契數(shù)列對(duì)應(yīng)的值
讓客戶(hù)滿意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)站空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、東西湖網(wǎng)站維護(hù)、網(wǎng)站推廣。
說(shuō)明:
用mackbookpro i7 2.7GHZ筆記本進(jìn)行測(cè)試,結(jié)果如下:
備注: 當(dāng)n=80時(shí),由于測(cè)試等待時(shí)間過(guò)長(zhǎng),強(qiáng)制中斷了執(zhí)行。
從測(cè)試結(jié)果看出,當(dāng)n逐漸增大,遞歸方式計(jì)算斐波拉契數(shù)列的時(shí)間復(fù)雜性急劇增加。當(dāng)n值較大時(shí)可以考慮用循環(huán)方式代替。
類(lèi)似的方式也可以用于,求階乘、遍歷目錄、漢諾塔等問(wèn)題的解決。在后期的文章中,我將這些內(nèi)容進(jìn)行補(bǔ)充,敬請(qǐng)期待,謝謝。
最近聽(tīng)了一位同事的分享,他說(shuō)如果一個(gè)人不能把它所研究的項(xiàng)目/概念用十分簡(jiǎn)單的話表述清楚,那么就說(shuō)明他并沒(méi)有真正理解這個(gè)項(xiàng)目。然后他拿物理中粒子的自旋進(jìn)行舉例,有人向教授請(qǐng)教相關(guān)概念,教授說(shuō):我需要思考一下如何用淺顯的話進(jìn)行表述。稍許之后,教授說(shuō):很抱歉,可能我只能用非常復(fù)雜的公式和概念向你解釋了。這說(shuō)明了可能人類(lèi)對(duì)于這一現(xiàn)象的本質(zhì)并沒(méi)有理解。
結(jié)合我的上一篇文章 最近的一些感悟 - 體系的力量 ,這更加說(shuō)明了我們?cè)趯W(xué)習(xí)的時(shí)候其實(shí)就是撥開(kāi)繁雜的迷霧,去窺探一個(gè)概念、一個(gè)項(xiàng)目、一個(gè)體系它最核心的本質(zhì)。計(jì)算機(jī)是一門(mén)科學(xué),由人類(lèi)創(chuàng)造,所以我們應(yīng)該是能力用簡(jiǎn)單的話將它表述清楚的。所以我也會(huì)以這樣的要求來(lái)進(jìn)行寫(xiě)作,力求用最簡(jiǎn)單、清晰的語(yǔ)言來(lái)描述。
今天的內(nèi)容是golang中的context包中的Context接口。
context.Context本身為interface(接口),主要用于父協(xié)程關(guān)閉后可以同步關(guān)閉所有子孫協(xié)程,是一種并發(fā)控制/協(xié)程同步的重要手段。
那么我們實(shí)現(xiàn)Context,只需要實(shí)現(xiàn)Done, Err, Value, Deadline四個(gè)方法即可:
context包中提供了如withCancel, withTimeout等一系列方法用于創(chuàng)建子context。context之間呈樹(shù)狀結(jié)構(gòu),當(dāng)傳遞事件(如取消)/數(shù)據(jù)時(shí),可以遞歸地從上到下進(jìn)行傳遞以控制子孫協(xié)程。
WithCancel:
Cancel:
WithDeadline:
WithTimeout:實(shí)際上也是調(diào)用WithDeadline
GO是編譯性語(yǔ)言,所以函數(shù)的順序是無(wú)關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫(xiě)在最前面,其余函數(shù)按照功能需要進(jìn)行排列
GO的函數(shù) 不支持嵌套,重載和默認(rèn)參數(shù)
GO的函數(shù) 支持 無(wú)需聲明變量,可變長(zhǎng)度,多返回值,匿名,閉包等
GO的函數(shù)用 func 來(lái)聲明,且左大括號(hào) { 不能另起一行
一個(gè)簡(jiǎn)單的示例:
輸出為:
參數(shù):可以傳0個(gè)或多個(gè)值來(lái)供自己用
返回:通過(guò)用 return 來(lái)進(jìn)行返回
輸出為:
上面就是一個(gè)典型的多參數(shù)傳遞與多返回值
對(duì)例子的說(shuō)明:
按值傳遞:是對(duì)某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值
引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變?cè)瓉?lái)的值,并且消耗的內(nèi)存會(huì)更少,只有4或8個(gè)字節(jié)的消耗
在上例中,返回值 (d int, e int, f int) { 是進(jìn)行了命名,如果不想命名可以寫(xiě)成 (int,int,int){ ,返回的結(jié)果都是一樣的,但要注意:
當(dāng)返回了多個(gè)值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用 _ 來(lái)補(bǔ)位,例如上例的返回我們可以寫(xiě)成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來(lái)舍棄掉
在參數(shù)后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個(gè)可變長(zhǎng)度的參數(shù)
輸出為:
在上例中, strs ...string 中, strs 的實(shí)際值是b,c,d,e,這就是一個(gè)最簡(jiǎn)單的傳遞可變長(zhǎng)度的參數(shù)的例子,更多一些演變的形式,都非常類(lèi)似
在GO中 defer 關(guān)鍵字非常重要,相當(dāng)于面相對(duì)像中的析構(gòu)函數(shù),也就是在某個(gè)函數(shù)執(zhí)行完成后,GO會(huì)自動(dòng)這個(gè);
如果在多層循環(huán)中函數(shù)里,都定義了 defer ,那么它的執(zhí)行順序是先進(jìn)后出;
當(dāng)某個(gè)函數(shù)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí), defer 也會(huì)被調(diào)用
輸出為
這是一個(gè)最簡(jiǎn)單的測(cè)試了,當(dāng)然還有更復(fù)雜的調(diào)用,比如調(diào)試程序時(shí),判斷是哪個(gè)函數(shù)出了問(wèn)題,完全可以根據(jù) defer 打印出來(lái)的內(nèi)容來(lái)進(jìn)行判斷,非常快速,這種留給你們?nèi)?shí)現(xiàn)
一個(gè)函數(shù)在函數(shù)體內(nèi)自己調(diào)用自己我們稱(chēng)之為遞歸函數(shù),在做遞歸調(diào)用時(shí),經(jīng)常會(huì)將內(nèi)存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調(diào)用
本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct
1、打出主函數(shù)defs(n):ifn=1。
2、在打出條件函數(shù)return1else:result=n+s(n-1)return.result。
3、最后結(jié)尾返回函數(shù)的值result=s(10)print(result)。
文章題目:go語(yǔ)言遞歸樹(shù) gorm遞歸查找
新聞來(lái)源:http://www.rwnh.cn/article24/ddihece.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、App設(shè)計(jì)、定制網(wǎng)站、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容