




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
遞歸一個函數或過程直接或間接調用它本身。例:用遞歸計算n!.1n=0n!=n*(n-1)!n>0Functionfac(n:integer):real;Beginifn=0thenfac:=1elsefac:=n*fac(n-1)End;定義函數fac:Programfacn(input,output);Varn:integer;y:real;functionfac(n:integer):real;beginifn=0thenfac:=1elsefac:=n*fac(n-1)end;Beginread(n);y:=fac(n);writeln(n,’!=‘,y)End.執行過程:(以fac(3)為例)Fac(3)第四次調用n=01*fac(0)返回值6返回值2返回值1返回值1第一次調用N=33*fac(2)第二次調用第三次調用n=2n=12*fac(1)Fac(3)=3*fac(2)=3*2*fac(1)=3*2*1*fac(0)=3*2*1*1求m與n的最大公約數。
(用輾轉相除法)
數學知識已知:m,n的最大公約數等價于求n與(mmodn)的最大公約數。mn=0gcd(m,n)=gcd(n,mmodn)n>0Functiongcd(m,n:integer):integer;beginifn=0thengcd:=melsegcd:=gcd(n,mmodn)end;Programgmn(input,output);Varm,n,g:integer;Beginread(m,n);g:=gcd(m,n);writeln(‘m=‘,m,’n=‘,n,’gcd=‘,g)End.漢諾塔游戲:n=64源中間目標ABC漢諾塔游戲:n=1源中間目標ABC漢諾塔游戲:n=2源中間目標ABC漢諾塔游戲:n=3源中間目標ABC思路:1.先把上面63個盤子從A柱子移到B柱子(借助C柱子)2.把第64個盤子從A柱子移到C號柱子.3.把63個盤子從B柱子移到C號柱子(借助A柱子)4.當只乘下一個盤子時,直接移到3號柱子.
把將n個盤子從a經b移到c這一動作定義成一個過程move:Move(64,a,b,c),整個處理過程可描述為:Move(63,a,c,b)ACMove(63,b,a,c)N=1falsetrueMove(n-1,a,c,b);Writeln(a,’’,c);Move(n-1,b,a,c)Writeln(a,’’,c)輸入盤子總數total;Move(total,1,2,3)主程序:子程序move:例:求total=3Move(3,1,2,3)Move(n,a,b,c)n=3a=1b=2c=3Move(2,1,3,2)Writeln(1,’
’,3)Move(2,2,1,3)n=2a=1b=3c=2Move(1,1,2,3)Writeln(1,’
’,2)Move(1,3,1,2)n=1a=1b=2c=3Writeln(1,’
’,3)n=1a=3b=1c=2Writeln(3,’
’,2)n=2a=2b=1c=3Writeln(2,’
’,3)Move(1,2,3,1)Move(1,1,2,3)n=1a=2b=3c=1Writeln(2,’
’,1)n=1a=1b=2c=3Writeln(1,’
’,3)1
31
23
21
32
12
31
3Programhanoi(input,output);Vartotal:integer;
proceduremove(n,a,b,c:integer);beginifn=1thenwriteln(a,’->’,c)elsebeginmove(n-1,a,c,b);writeln(a,’-->’,c);move(n-1,b,a,c)end;end;Beginread(total);move(total,1,2,3)End.練習:1、順序讀入字符,以‘?’結束,然后以和輸入相反的次序輸出讀入的字符,用遞歸過程作。2、求菲波拉契數列的第10項和第20項的值。已知:
a0=0a1=1A2=a0+a1A3=a1+a2A4=a2+a3programas;varch:char;procedures;varch1:char;beginread(ch1);ifch1<>'?'thens;ifch1<>'?'thenwrite(ch1)end;begins;writeln;end.programas;functiond(x:integer):longint;beginifx=0thend:=0elseifx=1thend:=1elsed:=d(x-2)+d(x-1)end;beginwriteln(d(10),d(20):10);end.二.遞推遞推是迭代算法中一種用若干步可重復的簡單運算來描述復雜數學問題的方法。例如求階乘的算法;在求階乘的算法中,存在如下的遞推公式:f(0)=0!=1f(1)=1*0!=1f(2)=2*1!=2f(3)=3*2!=6……f(n)=n*(n-1)!=n*f(n-1)
遞推的特點:可以從初始條件出發,應用遞推公式逐個求出其它的值。建立遞推公式的關鍵在于找到第n項與第n+1項的關系以及初始項的值。
a1=aan+1=f(an)兔子繁殖問題
有一對小兔,過一個月后長成大兔,到第三個月就可以生下一對小兔,并且以后每個月都生下一對小兔,而所生的小兔也同樣到一個月之后長成大兔,到第三個月就可以生下一對小兔,并且以后也每個月都生下一對小兔。假設所有的兔子一年內均不死亡,問一年后共有多少對兔子?分析:每個月的兔子都可分成二類:1001112
3
21小兔大兔ababbb+aaaaaa
1;b
0;Month1whilemonth<12doaaa;ab;bb+aamonthmonth+1to
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇揚州人才集團下屬企業招聘6人筆試備考試題及參考答案詳解1套
- 2025江蘇揚州大學附屬醫院招聘20人筆試參考題庫附答案解析附答案詳解
- 2025江蘇徐州市中心醫院招聘高層次衛生人才31人筆試備考題庫及參考答案詳解1套
- 2025江蘇揚州現代農業生態環境投資發展集團招聘筆試備考題庫及一套參考答案詳解
- 2024年河北邯鄲叢臺區公開招聘教師200名筆試備考題庫及1套完整答案詳解
- 2025廣東選拔汕頭市市級鄉村振興人才80人筆試備考題庫及1套完整答案詳解
- 2025年寶雞市公務員考試行測試卷歷年真題附答案詳解(模擬題)
- 陜西省“西中教育聯合體”2024-2025學年高一上學期期中考試數學試題(解析版)
- 山東省臨沂市莒南縣2024-2025學年高一上學期期中學業質量檢測數學試題(解析版)
- 2019-2025年二級建造師之二建建設工程法規及相關知識通關試題庫(有答案)
- 2024年度海南省國家電網招聘之電網計算機題庫附答案(典型題)
- (初級)五級起重裝卸機械操作工職業技能鑒定理論考試題庫(含答案)
- 裂隙燈顯微鏡檢查
- 中國Linux軟件行業市場發展現狀及前景趨勢與投資分析研究報告(2024-2030版)
- 《新能源乘用車二手車鑒定評估技術規范 第1部分:純電動》
- 《加坡的教育制度》課件
- 2025年國家知識產權局商標審查協作中心招聘60人高頻重點提升(共500題)附帶答案詳解
- 有源醫療器械現場檢查
- 品管圈PDCA改善案例-降低住院患者跌倒發生率
- 銀行催收實習心得
- 2024年高考政治總復習必修三《政治與法治》 綜合測試題及答案
評論
0/150
提交評論