實例3.8使用可選參數(shù)
編寫一個用于計算兩個實數(shù)的和以及平均值的子過程,該子過程具有一個可選參數(shù),在調(diào)用子過程時,如果不提供與可選參數(shù)對應(yīng)的實參,或?qū)崊⒌闹禐?,則在窗體上只打印兩個數(shù)的和;如果提供了一個不為0實參,則在窗體上還將打印出兩個數(shù)的平均值。
具有可選參數(shù)的子過程的代碼如下:
Private Sub(x As Single,y As Single,Optional n As Boolean=0)
Dim s As Single,A As Single
s=x=y
A=S/2
If n=False Then
Print“總和為:”& S
Else
Print“總和為:”& S
Print“平均值為:”& A
End If
End Sub
在窗體的Click事件過程中調(diào)用子過程Sum.代碼如下:
Private Sub Form_Click()
Print “不提供與可選參數(shù)對應(yīng)的實參”
Sun 6,9
Print “提供與可選參數(shù)對應(yīng)的實參,并且實參為0:”
Sun 6,9,0
Print 空行
Print “提供與可選參數(shù)對應(yīng)的實參,并且實參不為0:”
Sun 6,9,1
End Sub
運行程序,單擊窗體,結(jié)果如圖3.25所示。
遞歸是推理和問題求解的一種強有力方法,原因在于許多對象,特別是數(shù)學(xué)研究對象具有遞歸的結(jié)構(gòu)。簡單地說,如果通過一個對象自身的結(jié)構(gòu)來描述或部分描述該對象就稱為遞歸。最簡單而易于理解的一個例子是階乘的遞歸定義。如果以函數(shù)f(n〕表示自然數(shù)n的階乘的道,則有定義:
遞歸定義使我們能夠用有限的語句描述一個無窮的集合。本例描述一個無窮的集合只用了兩個語句。
VB程序設(shè)計語言允許一個過程體有調(diào)用自身的語句,稱為遞歸調(diào)用。也允許調(diào)用另一過程,而該過程又反過來調(diào)用本過程,稱為間接遞歸調(diào)用。這種功能為求解具有遞歸結(jié)構(gòu)的問題提供了強有力手段,使程序語言的描述與問題的自然描述完全一致,因而使程序易于理解,易于保證和維護。例如,對于上面的n階乘的遞歸定義,可以寫出相應(yīng)的VB函數(shù)過程,如下面的實例3.9.這個過程的推理(計算)路線與原來函數(shù)的(遞歸)數(shù)學(xué)定義完全一致。
實例3.9求n階乘的VB函數(shù)過程
Private Function F(byval n As Integer) As Integer
If n=1 Then
F=1
Else
F=n*F(n-1)
End If
End Function
讓我們來跟蹤這個程序的計算過程,令n=4調(diào)用這個函數(shù),用下面的形式來表示遞歸求解的過程:
(1)F(4)=4*F(3) n=4調(diào)用函數(shù)過程F(3)
(2)F(3)=3*F(2) n=3調(diào)用函數(shù)過程F(2)
(3)F(2)=2*F(1) n=2調(diào)用函數(shù)過程F(1)
(4)F(1)=1 n=1求的F(1)的值
(5)F(2)=2*1=2 回歸,n=2,求得F(2)的值
(6)F(3)=3*2=6 回歸,n=3,求的F(3)的值
(7)F(4)=4*6=24 回歸,n=3,求得F(4)的值
上面第1步到第4步求出F(1)=1的步驟稱為遞推,從第4步到第7步求出F(4)=4*6的步驟稱為回歸。
從這個例子可以看出,遞歸求解有兩個條件:
給出遞歸終止的條件和相應(yīng)的狀態(tài)。
在本例中遞歸終止的條件是n=1,狀態(tài)是F(1)=1.
2.給出遞歸的表述形式,并且這種表述要向著終止條件變化,在有限步內(nèi)達到終止條件。
在本例中,當(dāng)n>l時,給出遞歸的表述形式為F(n)=n*F(n-1).函數(shù)值F(n)用函數(shù)值F(n-1)來表示。參數(shù)的值向減少的方向變化,在第n步出現(xiàn)終止條件n=1。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |