遞迴程序

更新:2007 年 11 月

「遞迴」程序會呼叫自己的程序。一般而言,這不是撰寫 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

遞迴程序的考量

限制條件:您必須設計遞迴程序,測試至少有一個條件能終止遞迴,也必須能在合理的遞迴呼叫數目內都無法滿足此類條件時進行處理。除非至少符合一個條件且不會發生失敗,否則程序就可能陷入無限迴圈的高風險。

記憶體使用方式:應用程式所具備適用於區域變數的空間有限。每當程序呼叫其本身時,它會使用該空間以外的空間,處理其區域變數的其他複本。如果這個程序無限地繼續執行,最後會引起 StackOverflowException 錯誤。

效率:您幾乎都能取代遞迴迴圈。迴圈不會有傳遞引數、初始化其他儲存區和傳回值的負荷。沒有遞迴呼叫,效能可能大幅提升。

相互遞迴:您或許會觀察到,當兩個程序彼此呼叫時,效能可能很差,甚至造成無限迴圈。此類設計會與單一遞迴程序呈現相同的問題,但可能更難偵測和偵錯。

以括號呼叫:當 Function 程序遞迴地呼叫其本身時,您必須在程序名稱之後接著括號,即使沒有引數清單也一樣。否則,函式名稱會被視為代表該函式的傳回值。

測試:如果您撰寫遞迴程序,則應很謹慎地加以測試,確定它永遠符合部分的限制條件。您也應該確定不會因過多的遞迴呼叫而將記憶體用完。

請參閱

工作

程序疑難排解

疑難排解例外狀況:System.StackOverflowException

概念

Visual Basic 中的程序

Sub 程序

Function 程序

Property 程序

運算子程序

程序參數和引數

程序多載化

迴圈結構

參考

StackOverflowException