共用方式為


遞迴程序 (Visual Basic)

「遞迴」(Recursive) 程序會呼叫自己的程序。 一般而言,這不是撰寫 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 程序遞迴地呼叫其本身時,您必須在程序名稱之後接著括號,即使沒有引數清單也一樣。 否則,函式名稱會被視為代表該函式的傳回值。

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

請參閱

工作

疑難排解程序 (Visual Basic)

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

參考

StackOverflowException

概念

Visual Basic 中的程序

Sub 程序 (Visual Basic)

Function 程序 (Visual Basic)

屬性程序 (Visual Basic)

運算子程序 (Visual Basic)

程序參數和引數 (Visual Basic)

程序多載化 (Visual Basic)

迴圈結構 (Visual Basic)