版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
用遞歸法解決問題
教學(xué)重點(diǎn)(1)了解遞歸現(xiàn)象和遞歸算法的特點(diǎn)。(2)自定義函數(shù)及遞歸算法的自定義函數(shù)實(shí)現(xiàn)。(3)培養(yǎng)“自頂向下”、“逐步求精”的意識(shí)。
教學(xué)難點(diǎn)(1)遞歸過程思路的建立。(2)判斷問題是否適于遞歸解法。(3)正確寫出遞歸程序。
遞歸算法遞歸算法作為計(jì)算機(jī)程序設(shè)計(jì)中的一種重要的算法,是較難理解的算法之一。簡單地說,遞歸就是編寫這樣的一個(gè)特殊的過程,該過程體中有一個(gè)語句用于調(diào)用過程自身(稱為遞歸調(diào)用)。遞歸過程由于實(shí)現(xiàn)了自我的嵌套執(zhí)行,使這種過程的執(zhí)行變得復(fù)雜起來,其執(zhí)行的流程可以用圖1所示。遞歸算法調(diào)用子程序的含義
在過程和函數(shù)的學(xué)習(xí)中,我們知道調(diào)用子程序的一般形式是:主程序調(diào)用子程序A,子程序A調(diào)用子程序B,如圖如示,這個(gè)過程實(shí)際上是遞歸的定義:
一個(gè)函數(shù)在定義時(shí),地調(diào)用了自己,這種算法在程序設(shè)計(jì)中統(tǒng)稱為遞歸法。函數(shù)A函數(shù)B類型二函數(shù)A類型一直接或者間接遞歸算法遞歸是一種直接或者間接地調(diào)用自身的算法。在計(jì)算機(jī)編寫程序中,遞歸算法對(duì)解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。
例(1)利用遞歸方法編寫一求N的階乘程序。分析:根據(jù)N!=N*(N-1)*(N-2)*(N-3)*……*3*2*1
可以推出下列式子:
這是一個(gè)典型的遞歸算法,參考程序如下:FunctionFa(ByValnAsInteger)AsLongIfn=1ThenFa=1ElseFa=n*Fa(n-1)EndIfEndFunctionPrivateSubForm_Click()DimnAsIntegern=Val(InputBox("輸入正整數(shù)N:","N!"))Print"輸入的正整數(shù)是";n;Print",階乘是";Fa(n)EndSub程序代碼自定義函數(shù)的定義格式:Functionprocedurename(arguments)[Astype]StatementsEndFunction其中:procedurename是函數(shù)名,
arguments是函數(shù)中的參數(shù)表,
type是函數(shù)返回值的數(shù)據(jù)類型,
statements是過程中的代碼調(diào)用函數(shù)的格式:Procedurename(arguments)分析:可以推出下列式子:
1月2月3月4月5月6月7月8月9月10月11月12月小兔1
11235813213455大兔
1123581321345589合計(jì)1123581321345589144例(2)斐波那契(Fibonacci)數(shù)列
“兔子問題”:假定小兔子一個(gè)月就可以長成大兔子,而大兔子每個(gè)月都會(huì)生出一對(duì)小兔子。如果年初養(yǎng)了一對(duì)小兔子,問到年底時(shí)將有多少對(duì)兔子?FunctionFb(ByValNAsInteger)AsLong
IfN<3ThenFb=1ElseFb=Fb(N-1)+Fb(N-2)EndIfEndFunctionPrivateSubCommand1_Click()
N=Val(Text1.Text)
Text2.Text="第"&N&"月的兔子數(shù)目是:"&Fb(N)EndSub程序代碼分析:第一階第二階第三階例(3)爬樓梯樓梯一共有N個(gè)臺(tái)階,小明爬樓梯的方法是一步跨一個(gè)臺(tái)階或者一步跨兩個(gè)臺(tái)階,于是小明開始爬樓,爬上樓以后小明提了一個(gè)問題:按剛才那樣,爬完臺(tái)階一共有多少種可能的爬法?第一階只有一種爬法:跨一步1種第二階有兩種爬法:每次只跨1步或者跨2步2種第三階有三種爬法:有可能來自第一階,也有可能來自第二階3種思考:那第四階,第五階有多少種爬法呢那第n階有多少種爬法呢?假設(shè)g(n)表示第n個(gè)臺(tái)階的爬法由數(shù)學(xué)知識(shí)可得遞歸關(guān)系式:ng(n-1)+g(n-2)n>2n≤2g(n)=遞歸程序如下:Privatefunctiong(byvalnasinteger)Ifn=1orn=2theng=nElseg=g(n-1)+g(n-2)EndifEndfunction思考g(n)與g(n-1)、g(n-2)關(guān)系任務(wù):1、寫出遞歸公式2、完成程序代碼小結(jié):遞歸算法的特點(diǎn):
遞歸過程:
一般通過函數(shù)或子過程來實(shí)現(xiàn)。
遞歸算法:
在函數(shù)或子過程的內(nèi)部,直接或者間接地調(diào)用自己的算法。遞歸算法的實(shí)質(zhì):
是把問題轉(zhuǎn)化為規(guī)??s小了的同類問題的子問題。
然后遞歸調(diào)用函數(shù)(或過程)來表示問題的解。
小結(jié):一個(gè)應(yīng)用遞歸算法解決的問題經(jīng)典例子傳說在古代印度的貝拿勒斯神廟,有一塊黃銅板上插了3根寶石柱,在其中一根寶石柱自上而下由小到大地疊放著64個(gè)大小不等的金盤。一名僧人把這些金盤從一根寶石柱移到另外一根上。僧人在移動(dòng)金盤時(shí)遵守下面3條規(guī)則:第一,一次只能移動(dòng)一個(gè)金盤。第二,每個(gè)金盤只能由一根寶石柱移到另外一根寶石柱。第三,任何時(shí)候都不能把大的金盤放在小的金盤上。神話說,如果僧人把64個(gè)金盤完全地從一根寶石移到了另外一根上,世界的末日就要到了。當(dāng)然,神話只能當(dāng)故事來聽,世界不可以因?yàn)閭€(gè)別人的活動(dòng)而導(dǎo)致末日。不過,從僧人搬完64個(gè)金盤所需時(shí)間的角度來說,即使僧人每秒都能移動(dòng)一個(gè)金盤,那也得要幾千億年!分析問題我們把3根寶石柱分別命名為A、B、C。最初有N個(gè)金盤放在A,需要把它們?nèi)堪匆?guī)則移動(dòng)到B。當(dāng)N=1時(shí),直接把金盤從A搬到B就可以了,1次成功。當(dāng)N≥2,那么需要利用C柱來過渡。我們假設(shè)已經(jīng)找到一種把N-1個(gè)金盤從一根柱搬到另外一根柱的方法,那么,我們只要把N-1個(gè)金盤從A搬到C,然后把最大的金盤從A搬到B,最后把C上的N-1個(gè)金盤搬到B就可以了??窟f歸的思想,我們輕而易舉地完成了整個(gè)搬動(dòng)。設(shè)計(jì)算法
我們定義一個(gè)過程Hanoi(N,A,B,C),表示有N個(gè)金盤需要從A柱搬到B柱(以C柱為過渡)。那么完成它只需3步:①Hanoi(N-1,A,C,B)它的意思是把A柱上的N-1個(gè)金盤搬到C柱;②
A→B
它的意思是把一個(gè)(最大的)金盤從A柱搬到B柱;③
Hanoi(N-1,C,B,A)它的意思是把c柱上的N-1個(gè)金盤搬到B柱。子程序PrivateSubHanoi(nAsInteger,ByValAAsString,ByValBAsString,ByValCAsString,tAsLong)Ifn=1ThenText3.Text=Text3.Text+A+"→"+B+“"t=t+1增加變量t用來統(tǒng)計(jì)移動(dòng)次數(shù)。Else
CallHanoi(n-1,A,C,B,t)
Text3.Text=Text3.Text+A+"→"+B+“"
t=t+1
CallHanoi(n-1,C,B,A,t)EndIfEndSub主程序PrivateSubCommand1_Click()
DimtAsLong,nAsInteger
t=0
n=Val(Text1.Text)
A="A":
B="B":
C="C"
CallHanoi(n,A,B,C,t)
Text2.Text=tEndSub小結(jié)遞歸算法所體現(xiàn)的“重復(fù)”一般有三個(gè)要求
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 滅火器的緊急逃生用法
- 概率統(tǒng)計(jì)算法復(fù)習(xí)題
- 屋面工程施工合同細(xì)節(jié)
- 違反工作紀(jì)律整改報(bào)告
- 2025年浙教新版九年級(jí)物理下冊(cè)階段測試試卷含答案
- 機(jī)器抵押合同(2篇)
- 更換廚房用品合同(2篇)
- 服務(wù)記錄協(xié)議書(2篇)
- 2025年蘇教新版八年級(jí)歷史下冊(cè)月考試卷
- 2025年粵教滬科版選修歷史上冊(cè)階段測試試卷
- 駕照體檢表完整版本
- 高一數(shù)學(xué)寒假講義(新人教A專用)【復(fù)習(xí)】第05講 三角函數(shù)(學(xué)生卷)
- 農(nóng)村高中思想政治課時(shí)政教育研究的中期報(bào)告
- 醫(yī)院定崗定編方案文檔
- 4-熔化焊與熱切割作業(yè)基礎(chǔ)知識(shí)(一)
- 2023年200MW儲(chǔ)能電站儲(chǔ)能系統(tǒng)設(shè)計(jì)方案
- 個(gè)人安全與社會(huì)責(zé)任的基本知識(shí)概述
- 建筑裝飾工程計(jì)量與計(jì)價(jià)試題一及答案
- 簡易勞務(wù)合同電子版
- 明代文學(xué)緒論
- 體育賽事的策劃、組織與實(shí)施 體育賽事利益相關(guān)者
評(píng)論
0/150
提交評(píng)論