算法與結(jié)構(gòu)課件第二章遞歸(華北電力大學(xué)科技學(xué)院).ppt
《算法與結(jié)構(gòu)課件第二章遞歸(華北電力大學(xué)科技學(xué)院).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《算法與結(jié)構(gòu)課件第二章遞歸(華北電力大學(xué)科技學(xué)院).ppt(58頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
計(jì)算機(jī)算法設(shè)計(jì)與分析,NorthChinaElectricPowerUniversity,ComputerAlgorithmsDesignreturnn*Factorial(n-1);},2遞歸算法的應(yīng)用和實(shí)現(xiàn),如果問題的數(shù)據(jù)結(jié)構(gòu)是遞歸的,問題的定義是遞歸的,問題的解法是遞歸的,可以考慮用遞歸算法。,看下面的數(shù)據(jù)結(jié)構(gòu):,,,,,Head,^,…,,,,Head,,,這是單鏈表,每個(gè)結(jié)點(diǎn)有兩個(gè)域:數(shù)據(jù)域和指針域。它是一種遞歸的結(jié)構(gòu),可定義為:1)一個(gè)結(jié)點(diǎn),其指針域?yàn)閚ull,是一個(gè)單鏈表;2)一個(gè)結(jié)點(diǎn),其指針域?yàn)橛行е羔樦赶蛞粋€(gè)單鏈表,仍是一個(gè)單鏈表。,1)問題的數(shù)據(jù)結(jié)構(gòu)是遞歸的,NorthChinaElectricPowerUniversity,若存在如上定義的一個(gè)單鏈表,現(xiàn)要實(shí)現(xiàn)打印最后一個(gè)結(jié)點(diǎn)的數(shù)據(jù)域的值,可用下面遞歸過程:,templateclasslink_list{Typedata;link_list*next;};templatevoidsearch1(link_list*h){if(h->next==null)coutdata;elsesearch1(h->next);},NorthChinaElectricPowerUniversity,NorthChinaElectricPowerUniversity,二叉樹(BinaryTree)也是一種遞歸的數(shù)據(jù)結(jié)構(gòu),其遞歸定義為:1)它是一棵空樹;2)它是由一個(gè)根結(jié)點(diǎn)和兩棵分別稱為左右子樹的二叉樹構(gòu)成。,要遍歷一棵二叉樹可以采用下面的遞歸算法:,voidTraverse(Bitptr*t){if(t!=null){coutdata;Traverse(t->lchild);Traverse(t->rchild);}},NorthChinaElectricPowerUniversity,例:Fibonacci數(shù)列無窮數(shù)列1,1,2,3,5,8,13,21,34,55,…,稱為Fibonacci數(shù)列。它可以遞歸地定義為:,Fib(n)=,,1n=0,1n=1,Fib(n-1)+Fib(n-2)n>1,第n個(gè)Fibonacci數(shù)可遞歸地計(jì)算如下:intFibonacci(intn){if(nm>1;正整數(shù)n的最大加數(shù)n1不大于m的劃分由n1=m的劃分和n1≤m-1的劃分組成。以上的關(guān)系實(shí)際上給出了計(jì)算q(n,m)的遞歸式如下:,q(n,m)=,,1m=1,q(n,n)nm>1,0n<1或m<1,遞歸算法的設(shè)計(jì)方法,,遞歸算法既是一種有效的算法設(shè)計(jì)方法,也是一種有效的分析問題的方法。遞歸算法求解問題的基本思想是:對(duì)于一個(gè)較為復(fù)雜的問題,把原問題分解成若干個(gè)相對(duì)簡單且類同的子問題,這樣,原問題就可遞推得到解。適宜于用遞歸算法求解的問題的充分必要條件是:(1)問題具有某種可借用的類同自身的子問題描述的性質(zhì);(2)某一有限步的子問題(也稱作本原問題)有直接的解存在。當(dāng)一個(gè)問題存在上述兩個(gè)基本要素時(shí),該問題的遞歸算法的設(shè)計(jì)方法是:(1)把對(duì)原問題的求解設(shè)計(jì)成包含有對(duì)子問題求解的形式。(2)設(shè)計(jì)遞歸出口。,,例設(shè)計(jì)模擬漢諾塔問題求解過程的算法。漢諾塔問題的描述是:設(shè)有3根標(biāo)號(hào)為A,B,C的柱子,在A柱上放著n個(gè)盤子,每一個(gè)都比下面的略小一點(diǎn),要求把A柱上的盤子全部移到C柱上,移動(dòng)的規(guī)則是:(1)一次只能移動(dòng)一個(gè)盤子;(2)移動(dòng)過程中大盤子不能放在小盤子上面;(3)在移動(dòng)過程中盤子可以放在A,B,C的任意一個(gè)柱子上。,問題分析:可以用遞歸方法求解n個(gè)盤子的漢諾塔問題。,,基本思想:1個(gè)盤子的漢諾塔問題可直接移動(dòng)。n個(gè)盤子的漢諾塔問題可遞歸表示為,首先把上邊的n-1個(gè)盤子從A柱移到B柱,然后把最下邊的一個(gè)盤子從A柱移到C柱,最后把移到B柱的n-1個(gè)盤子再移到C柱。4個(gè)盤子漢諾塔問題的遞歸求解示意圖如圖6-4所示。,,圖6-4漢諾塔問題的遞歸求解示意圖,,,,,,,,,,,,,,,,,,,,,,,,,,Y,X,Z,以三個(gè)盤為例:,A,B,C,,算法設(shè)計(jì):首先,盤子的個(gè)數(shù)n是必須的一個(gè)輸入?yún)?shù),對(duì)n個(gè)盤子,我們可從上至下依次編號(hào)為1,2,…,n;其次,輸入?yún)?shù)還需有3個(gè)柱子的代號(hào),我們令3個(gè)柱子的參數(shù)名分別為fromPeg,auxPeg和toPeg;最后,漢諾塔問題的求解是一個(gè)處理過程,因此算法的輸出是n個(gè)盤子從柱子fromPeg借助柱子auxPeg移動(dòng)到柱子toPeg的移動(dòng)步驟,我們?cè)O(shè)計(jì)每一步的移動(dòng)為屏幕顯示如下形式的信息:MoveDiskifromPegXtoPegY這樣,漢諾塔問題的遞歸算法可設(shè)計(jì)如下:,voidtowers(intn,charfromPeg,chartoPeg,charauxPeg){if(n==1)//遞歸出口{printf("%s%c%s%c\n","movedisk1frompeg",fromPeg,"topeg",toPeg);return;}//把n-1個(gè)圓盤從fromPeg借助toPeg移至auxPegtowers(n-1,fromPeg,auxPeg,toPeg);//把圓盤n由fromPeg直接移至toPegprintf("%s%d%s%c%s%c\n","movedisk",n,"frompeg",fromPeg,"topeg",toPeg);//把n-1個(gè)圓盤從auxPeg借助fromPeg移至toPegtowers(n-1,auxPeg,toPeg,fromPeg);},測試主函數(shù)如下:#includevoidmain(void){Towers(4,A,C,B);}程序運(yùn)行的輸出信息如下:,MoveDisk1fromPegAtoPegBMoveDisk2fromPegAtoPegCMoveDisk1fromPegBtoPegCMoveDisk3fromPegAtoPegBMoveDisk1fromPegCtoPegAMoveDisk2fromPegCtoPegBMoveDisk1fromPegAtoPegBMoveDisk4fromPegAtoPegCMoveDisk1fromPegBtoPegCMoveDisk2fromPegBtoPegAMoveDisk1fromPegCtoPegAMoveDisk3fromPegBtoPegCMoveDisk1fromPegAtoPegBMoveDisk2fromPegAtoPegCMoveDisk1fromPegBtoPegC,總結(jié)如下:遞歸算法的執(zhí)行過程是不斷地自調(diào)用,直到到達(dá)遞歸出口才結(jié)束自調(diào)用過程;到達(dá)遞歸出口后,遞歸算法開始按最后調(diào)用的過程最先返回的次序返回;返回到最外層的調(diào)用語句時(shí)遞歸算法執(zhí)行過程結(jié)束。,代碼,,遞歸過程的實(shí)現(xiàn),,對(duì)于非遞歸函數(shù),調(diào)用函數(shù)在調(diào)用被調(diào)用函數(shù)前,系統(tǒng)要保存以下兩類信息:(1)調(diào)用函數(shù)的返回地址;(2)調(diào)用函數(shù)的局部變量值。當(dāng)執(zhí)行完被調(diào)用函數(shù),返回調(diào)用函數(shù)前,系統(tǒng)首先要恢復(fù)調(diào)用函數(shù)的局部變量值,然后返回調(diào)用函數(shù)的返回地址。遞歸函數(shù)被調(diào)用時(shí),系統(tǒng)要作的工作和非遞歸函數(shù)被調(diào)用時(shí)系統(tǒng)要作的工作在形式上類同,但保存信息的方法不同。,遞歸函數(shù)被調(diào)用時(shí),系統(tǒng)的運(yùn)行時(shí)棧也要保存上述兩類信息。每一層遞歸調(diào)用所需保存的信息構(gòu)成運(yùn)行時(shí)棧的一個(gè)工作記錄,在每進(jìn)入下一層遞歸調(diào)用時(shí),系統(tǒng)就建立一個(gè)新的工作記錄,并把這個(gè)工作記錄進(jìn)棧成為運(yùn)行時(shí)棧新的棧頂;每返回一層遞歸調(diào)用,就退棧一個(gè)工作記錄。因?yàn)闂m數(shù)墓ぷ饔涗洷囟ㄊ钱?dāng)前正在運(yùn)行的遞歸函數(shù)的工作記錄,所以棧頂?shù)墓ぷ饔涗浺卜Q為活動(dòng)記錄。,設(shè)計(jì)舉例,一般遞歸算法設(shè)計(jì)舉例,例1設(shè)計(jì)一個(gè)輸出如下形式數(shù)值的遞歸算法。nnn...n......333221,問題分析:該問題可以看成由兩部分組成:一部分是輸出一行值為n的數(shù)值;另一部分是原問題的子問題,其參數(shù)為n-1。當(dāng)參數(shù)減到0時(shí)不再輸出任何數(shù)據(jù)值,因此遞歸的出口是當(dāng)參數(shù)n≤0時(shí)空語句返回。算法設(shè)計(jì):遞歸算法設(shè)計(jì)如下:voidDisplay(intn){inti;for(i=1;i0)Display(n-1);//遞歸//n<=0為遞歸出口,遞歸出口為空語句},代碼,例6-6設(shè)計(jì)求解委員會(huì)問題的算法。委員會(huì)問題是:從一個(gè)有n個(gè)人的團(tuán)體中抽出k(k≤n)個(gè)人組成一個(gè)委員會(huì),計(jì)算共有多少種構(gòu)成方法。問題分析:從n個(gè)人中抽出k(k≤n)個(gè)人的問題是一個(gè)組合問題。把n個(gè)人固定位置后,從n個(gè)人中抽出k個(gè)人的問題可分解為兩部分之和:第一部分是第一個(gè)人包括在k個(gè)人中,第二部分是第一個(gè)人不包括在k個(gè)人中。對(duì)于第一部分,則問題簡化為從n-1個(gè)人中抽出k-1個(gè)人的問題;對(duì)于第二部分,則問題簡化為從n-1個(gè)人中抽出k個(gè)人的問題。圖6-7給出了n=5,k=2時(shí)問題的分解示意圖。,圖6-7委員會(huì)問題分解示意圖,當(dāng)n=k或k=0時(shí),該問題可直接求解,數(shù)值均為1,這是算法的遞歸出口。因此,委員會(huì)問題的遞推定義式為:,intComm(intn,intk){if(nn)return0;if(k==0)return1;if(n==k)return1;returnComm(n-1,k-1)+Comm(n-1,k);},例6-7求兩個(gè)正整數(shù)n和m最大公約數(shù)的遞推定義式為:,要求:(1)編寫求解該問題的遞歸算法;(2)分析當(dāng)調(diào)用語句為Gcd(30,4)時(shí)算法的執(zhí)行過程和執(zhí)行結(jié)果;(3)分析當(dāng)調(diào)用語句為Gcd(97,5)時(shí)算法的執(zhí)行過程和執(zhí)行結(jié)果;(4)編寫求解該問題的循環(huán)結(jié)構(gòu)算法。,,解:(1)遞歸算法如下:intGcd(intn,intm){if(nn)returnGcd(m,n);elsereturnGcd(m,n%m);}(2)調(diào)用語句為Gcd(30,4)時(shí),因m- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 算法 結(jié)構(gòu) 課件 第二 遞歸 華北電力 大學(xué) 科技學(xué)院
鏈接地址:http://www.3dchina-expo.com/p-3501592.html