用遞歸法解決問題_第1頁
用遞歸法解決問題_第2頁
用遞歸法解決問題_第3頁
用遞歸法解決問題_第4頁
用遞歸法解決問題_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、黃學鴻“從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢?從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢? 從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢?

2、從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事,講什么呢?”這個故事有什么特點?自己調用自己如果在一個函數中,它自己調用了自己,這種現象叫遞歸調用。如果A函數調用B函數,B函數又反過來調用A函數,那這種現象也叫做遞歸調用。如果一個函數在定義時,直接或間接的調用了自己,這種算法在程序設計中統(tǒng)稱為遞歸法。遞歸法一般需要遞歸法一般需要定義函數定義函數來實現。來實現。 雖然VB為我們提供了大量的標準函數,但我們在實際應用時難免有時還是找不到合意的,那就只有自己解決了,這樣為了一個特定的任務而編出來的函數叫自定義函數。Abs()、len()、date()、sqr()、msgbox()等二、自定義函

3、數的作用二、自定義函數的作用 1、可以方便的把較為復雜的問題分解成若干、可以方便的把較為復雜的問題分解成若干個小問題去處理。個小問題去處理。(公司里就是采用這中模式的。公司里就是采用這中模式的。) 2、使程序結構清晰,層次分明,增強了程序、使程序結構清晰,層次分明,增強了程序的可讀性。的可讀性。 一、標準函數一、標準函數 VB給我們提供了一些標準函數,我們不用了解這些函數如何求出來的,只管直接調用它們,挺方便的。如正弦函數,余弦函數,算術平方根有了這些函數,我們覺得很省事。如:求1加到100的算術平方根這個程序我們可以這樣編寫:例1 dim I as integer, s as single

4、s=0 for i=1 to 100 do s=s+sqr(i) next i writeln(s=,s) 在這個程序里,我們直接用到了求平方根函數,至于sqr(1),sqr(2)如何求出來的我們不需過問,只管直接用它的結果便是了。 象這樣,VB給我們提供的,我們不用了解這些函數如何求出來的,只管直接調用它們的這類函數叫做標準函數。二、用戶自定義函數二、用戶自定義函數 我們來看看下面一個例子:求:1!2!3!10???如果要編寫程序,我們看到求階乘的操作要執(zhí)行10次,只不過每次所求的數不同。我們想:不至于編寫10遍求階乘的程序吧。我們希望有一個求階乘的函數,假設為JS(X),那么我們就可以這樣求

5、這道題了:例2 dim I as integer, j as integer dim s as integer s=0 for i=1 to 10 do s=s+js(i) next i writeln(s=,s)現在的問題是:VB沒提供JS(X)這樣一個標準函數,這個程序是通不過的。如果是PASCAL的標準函數,我們可以直接調用,如前面的sqr(i),而PASCAL提供給我們的可供直接調用的標準函數不多。沒關系,我們編寫自己的函數!三、函數編寫三、函數編寫在VB中,自定義函數形式如下:PublicPrivate Function (參數列表)As 類型 局部常量、變量定義 語句組 函數名稱返

6、回值End FunctionPublic(公共的)-全局變量,指在所有程序(包括主程序和過程)中都可以使用的內存變量Private(私人的)-局部變量,用private語句聲明的變量可被本窗體模塊的任何過程訪問,但其他模塊卻不能訪問該變量參數列表:參數列表: ByVal | ByRef 變量名變量名 ( ) As 類型類型 表示該參數按值傳遞不會修改變量原來的值表示該參數按地址傳遞會直接改變原來的變量值例3 編寫一求階乘的函數。我們給此函數取一名字就叫JS。fUNCTION js(n as integer) as integer dim I as integer, s as integer s

7、=1 for i=1 to n do s=s*i next i js=s end自定義函數的調用,可以有三種格式:變量=函數名稱(參數)Call 函數名稱(參數)函數名稱 參數Private Function daxiao(a As Integer, b As Integer)Dim t As IntegerIf a b Then t = a a = b b = tEnd IfEnd FunctionPrivate Sub Command1_Click()Dim a As Integer, b As Integera = 5b = 9Call daxiao(a, b)Print a=; a,

8、b=; bEnd SubPrivate Sub Command1_Click()Dim a As Integer, b As Integera = 5b = 9Daxiao a, bPrint a=; a, b=; bEnd Sub在VB中,說自定義函數,就不能不提子過程.子過程的定義如下:Public|private (參數列表)局部常量 變量定義End sub子過程和函數的本質是一樣的,在VB中往往將函數看做特殊的子過程子過程與函數的區(qū)別:關鍵字:函數(Function) 子過程(sub)返回值:函數(可以有) 子過程(無)調用格式:變量=函數名稱(參數)Call 函數名稱(參數)函數名稱

9、 參數函數子過程Call 函數名稱(參數)函數名稱 參數1月2月3月4月5月Recursion(1)=1Recursion(2)=1Recursion(3)=Recursion(2)+Recursion(1)Recursion(4)=Recursion(3)+Recursion(2)Recursion(5)=Recursion(4)+Recursion(3)圖圖3-25 函數遞歸調用關系函數遞歸調用關系例例1:1:假設有如下假設有如下subsub過程過程: :Sub s(x as single,y as single)Sub s(x as single,y as single) t=x t=x

10、 x=t/y x=t/y y=t mod y y=t mod yEnd subEnd subPrivate sub command1_click()Private sub command1_click() dim a as single dim a as single dim b as single dim b as single a=5 a=5 b=4 b=4 s a,b s a,b 函數名稱函數名稱 參數參數Print a,bPrint a,bEnd subEnd sub例例2:在窗體上畫一個名稱為在窗體上畫一個名稱為command1的命令按鈕的命令按鈕,然后編寫然后編寫如下通用過程和命令按鈕的事件過程如下通用過程和命令按鈕的事件過程:Private function fun(byval m as integer)If m mod 2 =0 then fun=2 else fun=1 end if End functionPrivate sub command1_click() dim I as integer,s as integer s=0 For I=1 to 5 s=s+fun(I)Next IPrint sEnd sub例例3:單擊命令按鈕時單擊命令按鈕時,下列程序的執(zhí)行結果為下列程序的執(zhí)行結果為( )Private sub c

溫馨提示

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

評論

0/150

提交評論