Share via


遞迴程序 (Visual Basic)

「遞迴」程序是會呼叫本身的程序。 一般而言,這不是撰寫 Visual Basic 程式碼最有效的方式。

下列程序使用遞迴方式,計算其原始引數的階乘。

Function Factorial(n As Integer) As Integer
    If n <= 1 Then
        Return 1
    End If
    Return Factorial(n - 1) * n
End Function

遞迴程序的考量

限制條件。 設計遞迴程序時,必須測試至少一個可終止遞迴的條件,而且也必須處理在合理的遞迴呼叫次數內未滿足這類條件的情況。 如果沒有至少一個可符合而且不會失敗的條件,那麼您的程式就有很高的風險會在無限迴圈中執行。

記憶體使用量。 您的應用程式對於區域變數的空間有限。 每次呼叫程序本身時,它就會因為額外的區域變數複本,而用掉更多空間。 如果此處理序無限期繼續,最終會造成 StackOverflowException 錯誤。

效率。 您幾乎一律可以使用迴圈來替代遞迴。 迴圈沒有傳遞引數、初始化其他儲存體和傳回值的額外負荷。 沒有遞迴呼叫的情況下,效能可能更好。

相互遞迴。 如果兩個程序彼此互相呼叫,可能會觀察到效能非常差,或甚至出現無限迴圈。 這類設計會出現和單一遞迴程序相同的問題,但可能難以偵測和偵錯。

呼叫時使用括弧。 當 Function 程序以遞迴方式呼叫本身時,即使沒有引數清單,也必須在程序名稱之後加上括弧。 否則,會採用該函式名稱來代表該函式的傳回值。

測試。 如果撰寫了遞迴程序,應非常小心地進行測試,以確保其能一直符合某些限制條件。 也應該確保不會因為有太多的遞迴呼叫,而用盡記憶體。

另請參閱