資源描述:
《c語言--函數(shù)的遞歸調(diào)用.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、張福祥主編遼寧大學(xué)出版社C語言程序設(shè)計1計算機(jī)科學(xué)系陳垚我們先看這樣一個例子:說有一只調(diào)皮的小猴子,摘了一堆水果,第一天吃了水果的一半,又多吃了一個;第二天吃了剩下水果的一半,又多吃了一個;依次類推….到第十天,發(fā)現(xiàn)只剩下了1個水果,請問這只猴子到底摘了多少個水果?2計算機(jī)科學(xué)系陳垚一、函數(shù)遞歸的特點5.4函數(shù)遞歸調(diào)用后一部分與原始問題類似后一部分是原始問題的簡化1、定義:調(diào)用一個函數(shù)時直接或間接調(diào)用自身,稱之為函數(shù)的遞歸。2、一個問題能夠成為遞歸必須具備的條件是:許多數(shù)學(xué)函數(shù)都是用遞歸的形式定義的:3計算機(jī)科學(xué)系陳垚1.直接遞歸調(diào)用:函數(shù)直接調(diào)用本身二、程序中的遞歸方式
2、2.間接遞歸調(diào)用:函數(shù)間接調(diào)用本身4計算機(jī)科學(xué)系陳垚說明C語言對遞歸函數(shù)的自調(diào)用次數(shù)沒有限制必須有遞歸結(jié)束條件intf(x)intx;{inty,z;……z=f(y);……return(2*z);}直接調(diào)用間接調(diào)用intf1(x)intx;{inty,z;……z=f2(y);……return(2*z);}intf2(t)intt;{inta,c;……c=f1(a);……return(3+c);}5計算機(jī)科學(xué)系陳垚思考如下問題:例1:有5個人坐在一起,問第5個人多少歲,他說比第4個人大2歲;問第4個人歲數(shù),他說比第3個人大2歲;問第3個人,又說比第2個大2歲;問第2個人,說
3、比第1個人大2歲;最后問第1個人,他說他10歲;請問第5個人多大?比她大2歲比她大2歲比她大2歲比她大2歲我10歲6計算機(jī)科學(xué)系陳垚age(5)=16+2=18age(4)=14+2=16age(3)=12+2=14age(2)=10+2=1210(n=1)age(n)=age(n-1)+2(n>1)設(shè)age表示年齡,則有如下:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=107計算機(jī)科學(xué)系陳垚main(){printf(“%d”,age(5));}age(intn){intc;if(
4、n==1)c=10;elsec=age(n-1)+2;return(c);}age(5)c=10n=1c=age(3)+2n=4c=age(2)+2n=3c=age(1)+2n=2c=age(4)+2n=5c=10+2=12c=12+2=14c=14+2=16c=16+2=188計算機(jī)科學(xué)系陳垚例2:漢諾塔(Hanoi)問題BC問題:將A塔上n個盤子移至C(借助于B)。移動時,保證三個塔始終是大盤在下,小盤在上,并且每次只能移動一個盤子。An個盤子9計算機(jī)科學(xué)系陳垚必須用遞歸方式解決1)先將A塔n–1個盤子借助于C移至B上2)將A上剩下的一個移至C上.3)將B上n–1個盤
5、子借助于A移至C上.可以看到:1)、3)為同一問題,都為n–1個盤子借助于一個空塔移至另一塔上。10計算機(jī)科學(xué)系陳垚ABC例Hanoi問題11計算機(jī)科學(xué)系陳垚voidmove(chargetone,charputone){printf("%c--->%c",getone,putone);}voidhanoi(intn,charA,charB,charC){if(n==1)move(A,C);else{hanoi(n-1,A,C,B);move(A,C);hanoi(n-1,B,A,C);}}main(){intn;scanf("%d",&n);hanoi(n,‘A',
6、‘B',‘C');}程序如下:ABCABCABCABC12計算機(jī)科學(xué)系陳垚inputthenumberofdiskes:3?Thesteptomoving3diskes:A??>CA??>BC??>BA??>CB??>AB??>CA??>C運行情況如下:13計算機(jī)科學(xué)系陳垚?move(getone,putone)表示從getone塔移一個盤子至putone塔?hanoi(n,one,two,three)表示n個盤子從one塔借助于two塔(空)移至three塔,調(diào)用時塔用字符常量'A','B','C'表示。在程序中有兩個函數(shù):14計算機(jī)科學(xué)系陳垚小結(jié)1.函數(shù)遞歸的定義2.
7、函數(shù)遞歸的特點3.函數(shù)遞歸調(diào)用的方式本節(jié)課主要介紹的內(nèi)容:15計算機(jī)科學(xué)系陳垚上機(jī)作業(yè):說有一只調(diào)皮的小猴子,摘了一堆水果,第一天吃了水果的一半,又多吃了一個;第二天吃了剩下水果的一半,又多吃了一個;依次類推….到第十天,發(fā)現(xiàn)只剩下了10個水果,請問這只猴子到底摘了多少個水果?1(n=10)num(n)=2*(num(n+1)+1)(n<10)16計算機(jī)科學(xué)系陳垚