C語言遞推與遞歸_第1頁
C語言遞推與遞歸_第2頁
C語言遞推與遞歸_第3頁
C語言遞推與遞歸_第4頁
C語言遞推與遞歸_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

會計學(xué)1C語言遞推與遞歸遞推算法例題:古有善切餅者,名庖丙,庖丁之弟也。把一張大餅置于板上,不許離開,每一刀切下去都是一條直線。問切20刀最多能分成多少塊?第1頁/共25頁遞推算法a(n)表示切n刀可以分成的塊數(shù)a(1)=1+1=2 //切第1刀多出1塊a(2)=2+2=4 //切第2刀多出2塊a(3)=4+3=7 //切第3刀多出3塊a(4)=7+4=11 //切第4刀多出4塊歸納后得到規(guī)律:a(n)=a(n-1)+n //切第n刀多出n塊a(0)=1 //不切時塊數(shù)是1第2頁/共25頁遞推算法編寫函數(shù)cutpie求解切n刀后得到的塊數(shù)第3頁/共25頁遞推算法將復(fù)雜運算分解為若干重復(fù)的簡單運算后一步驟建立于前一步驟之上計算每一步驟的方法相同從開始向后計算出結(jié)果使用循環(huán)結(jié)構(gòu),通過多次循環(huán)逐漸逼近結(jié)果a(i)a(i+1)=a(i)+i;a(0)a(1)a(n)……第4頁/共25頁遞推算法練習(xí):遞推數(shù)列:數(shù)列的每一項都可以通過前面若干項計算生成,可用遞推公式定義練習(xí):階乘:1!,2!,3!,4!,……,(n-1)!,n! a(n)=n*a(n-1) //第n項通過第n-1項乘n得到

a(1)=1練習(xí):斐波那契數(shù)列:1,1,2,3,5,8…… a(n)=a(n-1)+a(n-2) a(0)=a(1)=1第5頁/共25頁遞推算法練習(xí):老人死后留下一堆棗子,ABCDE五兄弟要來分。A先來了后把棗子平均分成5份后發(fā)現(xiàn)多出1個,就取走了其中一份和多出來的1個。B來后把剩下的棗子平均分成5份發(fā)現(xiàn)多出1個,就取走了其中一份和多出來的1個。CDE來了之后,分別使用同樣的做法。編程求解最初至少有多少棗子。思路提示:BCDE看到的個數(shù)肯定應(yīng)該是4的倍數(shù)每人都能把棗子分成5份多一個,說明他們看到的棗子數(shù)應(yīng)該是5的倍數(shù)加1從小到大找到一個同時滿足上面條件的數(shù),即為E看到的數(shù)目第6頁/共25頁遞推算法第7頁/共25頁遞歸算法若一個過程直接或間接的調(diào)用自己,這個過程就是遞歸的過程一個比較復(fù)雜的問題,如果可以分解成為幾個相對簡單或規(guī)模較小且解法相同或類似的子問題時,只要解決了這些子問題,那么原來的問題也就可以解決了。這種策略稱為分而治之法比如:求10!,只要求出子問題9!,乘上10就得到了10!;要求9!,只要求出了8!,乘上9就得到了9!……當(dāng)分解出的子問題可以直接解決時,就停止分解。直接可以解決的子問題稱為遞歸結(jié)束條件。比如:0!=1就是結(jié)束條件遞歸過程可以通過編寫自我調(diào)用的遞歸函數(shù)來簡單的解決第8頁/共25頁遞歸算法切餅問題a(n)=a(n-1)+n也可用以下遞歸方法求解n==0,返回1n>0,返回n-1的結(jié)果加上n第9頁/共25頁遞歸算法參數(shù):1計算cutpie(0)+1返回(2)參數(shù):2計算cutpie(1)+2返回(4)參數(shù):3計算cutpie(2)+3返回(7)參數(shù):4計算cutpie(3)+4返回(11)main函數(shù)參數(shù):0直接返回1返回(1)第10頁/共25頁遞歸算法練習(xí):使用遞歸方法求解斐波那契數(shù)列第n項a(n);練習(xí):用遞歸方法求兩個整數(shù)m和n的最大公約若m%n為零是,n是m和n的最大公約數(shù)若m%n不為零,n和m%n的最大公約數(shù)即為m和n的最大公約數(shù)練習(xí):用遞歸的方法求整數(shù)1…n的前n項和練習(xí):讓用戶從鍵盤輸入10個整數(shù),逆序顯示示例輸入:12345910098示例輸出:89010954321練習(xí):從鍵盤輸入底邊長,在屏幕上打印倒三角形第11頁/共25頁計算組合數(shù)編程實現(xiàn)組合計數(shù)C(10,3)C(m,n)=1; 當(dāng)m=nC(m,n)=m; 當(dāng)n=1C(m,n)=C(m-1,n)+C(m-1,n-1)思路提示m個球取出來的n個,包含兩種情況:n在其中和n不在其中編程實現(xiàn)使用遞歸思想編寫遞歸函數(shù)intcmn(intm,intn)第12頁/共25頁計算組合數(shù)第13頁/共25頁漢諾塔問題據(jù)說在古代印度bramah神廟中,有個和尚整天把3根柱子上的金盤倒來倒去。初始在柱子A上有64個盤子串在一起,每一個盤子都比它下面的盤子小,可以在ABC三個柱子之間互相移動,最終要全部移動到柱子C上。移動規(guī)則如下:每次只允許移動一個,且較大的盤子永遠(yuǎn)不能放在較小的盤子上。如果每秒移動一個的話,移完需要5800億年。若初始時盤子數(shù)是n,編程求出移動的過程盤子從小到大(從上到下)編號依次為1,2……n-1,n第14頁/共25頁漢諾塔問題假如n=1,直接移動到C假如n=2,則需要先把1號盤移到B上,再把2號盤移動到C上,最后把1號盤移動到C上。(1)(2)(3)第15頁/共25頁漢諾塔問題假如初始時有n個盤,把1到n-1看作一個整體第一步把n-1個盤子,從A借助C移動到B第二步把第n個盤子,從A移動到B第三步把n-1個盤子,從B借助A移動到C編寫遞歸函數(shù)voidmove(intn,charx1,charx2,charx3)表示x1上有n個盤,move函數(shù)需要把n個盤從x1上移動到x3上;x2上無盤,或x2上任何一個盤都比較x1上的所有的盤大;移動過程可以借助x2第16頁/共25頁漢諾塔問題第17頁/共25頁快速排序問題快速排序思路如下將要排序的數(shù)據(jù)放在數(shù)組array中取a[0]變在變量m中,通過分區(qū)處理把m排在適當(dāng)?shù)奈恢茫筸左邊的數(shù)都比m小,m右邊的數(shù)都比m大按照常上面的思路分別處理m左邊和右邊的數(shù)據(jù)如果分區(qū)長度是1,停止處理使用遞歸函數(shù)編程voidqsort(intarray[],intstart,intend)把數(shù)組下標(biāo)為start到end的元素進行快速排序第18頁/共25頁快速排序問題573814262738145625381476243815762435187624315876143258761234587612345678第19頁/共25頁快速排序問題第20頁/共25頁遞歸思想遞歸定義階乘函數(shù)a(n+1)=a(n)*(n+1)冪函數(shù) (n+1)!=n!*(n+1)斐波那契數(shù)列f(n)=f(n-1)+f(n-2)遞歸數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu),結(jié)點next指向的也是一個鏈表樹結(jié)構(gòu),每個結(jié)點下面都是一棵子樹遞歸算法漢諾塔解法快速排序第21頁/共25頁遞推與遞歸遞推算法從頭開始,通過循環(huán)迭代逐漸逼近結(jié)果使用循環(huán)語句執(zhí)行效率高不易理解和寫程序循環(huán)加大程序的復(fù)雜程序遞歸算法到著開始,每一次遞歸都縮小問題規(guī)模,直到問題足夠小使

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論