VB.NET遞歸過(guò)程使用注意事項(xiàng)
VB.NET編程語(yǔ)言是當(dāng)下一款應(yīng)用比較頻繁的開(kāi)發(fā)語(yǔ)言。其功能非常強(qiáng)大。今天我們就可以通過(guò)對(duì)VB.NET遞歸過(guò)程的一些使用技巧來(lái)對(duì)這門(mén)語(yǔ)言進(jìn)行一個(gè)詳細(xì)的解讀,從而掌握這一語(yǔ)言的特點(diǎn)。
VB.NET遞歸過(guò)程是指調(diào)用自身的過(guò)程。通常,這不是編寫(xiě) Visual Basic 代碼的最有效方法。
下面的過(guò)程使用遞歸計(jì)算其原始參數(shù)的階乘:
- Visual Basic
- Function factorial(ByVal n As Integer) As Integer
- If n <= 1 Then
- Return 1
- Else
- Return factorial(n - 1) * n
- End If
- End Function
使用VB.NET遞歸過(guò)程時(shí)的注意事項(xiàng) #t#
限制條件。您在設(shè)計(jì)一個(gè)遞歸過(guò)程時(shí),必須至少測(cè)試一個(gè)可以終止此遞歸的條件,并且還必須對(duì)在合理的遞歸調(diào)用次數(shù)內(nèi)未滿(mǎn)足此類(lèi)條件的情況進(jìn)行處理。如果沒(méi)有一個(gè)在正常情況下可以滿(mǎn)足的條件,則過(guò)程將陷入執(zhí)行無(wú)限循環(huán)的高度危險(xiǎn)之中。
內(nèi)存使用。應(yīng)用程序的局部變量所使用的空間有限。過(guò)程在每次調(diào)用它自身時(shí),都會(huì)占用更多的內(nèi)存空間以保存其局部變量的附加副本。如果這個(gè)進(jìn)程無(wú)限持續(xù)下去,最終會(huì)導(dǎo)致 StackOverflowException 錯(cuò)誤。
效率。幾乎在任何情況下都可以用循環(huán)替代遞歸。循環(huán)不會(huì)產(chǎn)生傳遞變量、初始化附加存儲(chǔ)空間和返回值所需的開(kāi)銷(xiāo),因此使用循環(huán)相對(duì)于使用遞歸調(diào)用可以大幅提高性能。
相互遞歸。如果兩個(gè)過(guò)程相互調(diào)用,可能會(huì)使性能變差,甚至產(chǎn)生無(wú)限循環(huán)。此類(lèi)設(shè)計(jì)所產(chǎn)生的問(wèn)題與單個(gè)遞歸過(guò)程所產(chǎn)生的問(wèn)題相同,但更難檢測(cè)和調(diào)試。
調(diào)用時(shí)使用括號(hào)。當(dāng) Function 過(guò)程以遞歸方式調(diào)用它自身時(shí),您必須在過(guò)程名稱(chēng)后加上括號(hào)(即使不存在參數(shù)列表)。否則,函數(shù)名就會(huì)被視為表示函數(shù)的返回值。
測(cè)試。在編寫(xiě)VB.NET遞歸過(guò)程時(shí),應(yīng)非常細(xì)心地進(jìn)行測(cè)試,以確保它總是能滿(mǎn)足某些限制條件。您還應(yīng)該確保不會(huì)因?yàn)檫^(guò)多的遞歸調(diào)用而耗盡內(nèi)存。


















