
![c語(yǔ)言高級(jí)編程[1]_第1頁(yè)](https://static.zsdocx.com/FlexPaper/FileRoot/2019-8/28/22/0be61c51-2bc5-4a2b-9208-068013ce2fc3/0be61c51-2bc5-4a2b-9208-068013ce2fc31.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Comment[創(chuàng)創(chuàng)1]:頁(yè):237C語(yǔ)言高級(jí)編程技術(shù)237C語(yǔ)言高級(jí)編程技術(shù)語(yǔ)言高級(jí)編程技術(shù)8.18.1遞歸程序設(shè)計(jì)遞歸程序設(shè)計(jì)8.1.18.1.1遞歸與遞歸程序設(shè)計(jì)遞歸與遞歸程序設(shè)計(jì)遞歸技術(shù)在算法和程序設(shè)計(jì)中是一種十分有用的技術(shù),C語(yǔ)言提供了支持遞歸定義的機(jī)制和手段。遞歸有直接遞歸和間接遞歸兩種。在一個(gè)函數(shù)的定義中出現(xiàn)了對(duì)自身的調(diào)用,稱之為直接遞歸;一個(gè)函數(shù)f的定義中包含了對(duì)函數(shù)g的調(diào)用,而g的實(shí)現(xiàn)過(guò)程又調(diào)用了f,即函數(shù)調(diào)用形成了一
2、個(gè)環(huán)狀調(diào)用鏈這種方式稱之為間接遞歸。例8.18.1編寫一個(gè)遞歸函數(shù),求n的階乘值n!。若用fact(n)表示n的階乘值,根據(jù)階乘的數(shù)學(xué)定義可知:????????0)1(01)(nnfactnnnfact顯然當(dāng)n0時(shí),fact(n)是建立在fact(n1)的基礎(chǔ)上。由于求解fact(n1)的過(guò)程與求解fact(n)的過(guò)程完全相同,只是具體實(shí)參不同,因而在進(jìn)行程序設(shè)計(jì)時(shí),不必再仔細(xì)考慮fact(n1)的具體實(shí)現(xiàn),只需借助遞歸機(jī)制進(jìn)行自身調(diào)用
3、即可。于是求n的階乘值fact(n)的具體實(shí)現(xiàn)為:longfact(intn)longmif(n==0)return(1)elsem=nfact(n1)return(m)例8.28.2編寫一個(gè)遞歸函數(shù),求Fibonacci數(shù)列第n項(xiàng)的值。若用Fibona(n)表示Fibonacci數(shù)列第n項(xiàng)的值,根據(jù)Fibonacci數(shù)列的計(jì)算公式:???????2n2)Fibona(n1)Fibona(n211Fibona(n)n可知當(dāng)n2時(shí),F(xiàn)ib
4、onacci數(shù)列第n項(xiàng)的值等于第n1項(xiàng)的值與第n2項(xiàng)的值相加之和,而Fibonacci數(shù)列第n1項(xiàng)和第n2項(xiàng)值的求解又分別取決于它們各自前兩項(xiàng)之和??傊?,F(xiàn)ibona(n1)和Fibona(n2)的求解過(guò)程與Fibona(n)的求解過(guò)程相同,只是具體實(shí)參不同。利用以上這種性質(zhì),我們?cè)谶M(jìn)行程序設(shè)計(jì)時(shí)便可以使用遞歸技術(shù),F(xiàn)ibona(n1)和Fibona(n2)C語(yǔ)言高級(jí)編程技術(shù)239調(diào)用,這樣逐層返回,直至返回到第一次調(diào)用,當(dāng)?shù)谝淮握{(diào)用結(jié)
5、束后,釋放調(diào)用所分配的空間,整個(gè)遞歸調(diào)用才完成。在例8.1中,給出了一個(gè)求階乘的函數(shù)。下面以求4!為例,其調(diào)用過(guò)程如圖81所示。要求4!即要求的fact(4)值。圖81遞歸函數(shù)調(diào)用的執(zhí)行過(guò)程8.1.38.1.3遞歸算法的優(yōu)缺點(diǎn)遞歸算法的優(yōu)缺點(diǎn)遞歸函數(shù)的主要優(yōu)點(diǎn)是可以把算法寫的比使用非遞歸函數(shù)時(shí)更清晰更簡(jiǎn)潔,而且某些問題,特別是與人工智能有關(guān)的問題,更適宜用遞歸方法。遞歸算法的缺點(diǎn),一是需要額外的內(nèi)存開銷,特別是當(dāng)遞歸層次較大時(shí),遞歸函數(shù)
6、需要占用的堆??臻g相當(dāng)大。二是遞歸引起一系列的函數(shù)調(diào)用,并且可能會(huì)有一系列的重復(fù)計(jì)算,遞歸算法的執(zhí)行效率相對(duì)較低??傊?,遞歸算法要比解決同樣問題的非遞歸算法效率低一些。內(nèi)存空間需求更多一些。大多數(shù)用遞歸算法解決的問題,都可以找到相應(yīng)的非遞歸算法,只有少數(shù)問題的求解只有遞歸算法。由于遞歸算法具有效率低、內(nèi)存消耗大等缺點(diǎn),在設(shè)計(jì)程序時(shí),若有比較好的非遞歸算法,應(yīng)盡量采用非遞歸算法。8.1.48.1.4遞歸程序設(shè)計(jì)的應(yīng)用實(shí)例遞歸程序設(shè)計(jì)的應(yīng)用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++高級(jí)編程
- c語(yǔ)言編程技巧
- c語(yǔ)言編程實(shí)驗(yàn)
- c語(yǔ)言編程100題
- c語(yǔ)言基礎(chǔ)編程題
- c語(yǔ)言編程題匯總
- c語(yǔ)言編程基礎(chǔ)習(xí)題答案
- c語(yǔ)言編程實(shí)例100題
- c語(yǔ)言編程練習(xí)題
- 經(jīng)典c語(yǔ)言編程100例
- c語(yǔ)言編程必背單詞
- 大學(xué)經(jīng)典c語(yǔ)言編程試題
- c語(yǔ)言編程題及答案
- c語(yǔ)言編程題帶答案
- c語(yǔ)言編程必背單詞
- c語(yǔ)言經(jīng)典編程100例
- c語(yǔ)言課后編程題答案
- c語(yǔ)言編程例題及答案
- c語(yǔ)言高級(jí)面試題
- 高質(zhì)量c語(yǔ)言編程指南
評(píng)論
0/150
提交評(píng)論