Prosedur Rekursif (Visual Basic)
Prosedur rekursif adalah prosedur yang memanggil dirinya sendiri. Secara umum, prosedur ini bukan cara paling efektif untuk menulis kode Visual Basic.
Prosedur berikut menggunakan rekursi untuk menghitung faktorial argumen aslinya.
Function Factorial(n As Integer) As Integer
If n <= 1 Then
Return 1
End If
Return Factorial(n - 1) * n
End Function
Pertimbangan dengan Prosedur Rekursif
Kondisi Pembatasan. Anda harus merancang prosedur rekursif untuk menguji setidaknya satu kondisi yang dapat mengakhiri rekursi, dan Anda juga harus menangani kasus di mana tidak ada kondisi seperti itu yang terpenuhi dalam jumlah panggilan rekursif yang wajar. Tanpa setidaknya satu kondisi yang dapat dipenuhi tanpa gagal, prosedur Anda menjalankan risiko tinggi untuk mengeksekusi dalam perulangan tak terbatas.
Penggunaan Memori. Aplikasi Anda memiliki jumlah ruang terbatas untuk variabel lokal. Setiap kali prosedur memanggil dirinya sendiri, prosedur menggunakan lebih banyak ruang itu untuk salinan tambahan variabel lokalnya. Jika berlanjut tanpa batas waktu, proses ini akhirnya menyebabkan kesalahan StackOverflowException.
Efisiensi Anda hampir selalu dapat menggunakan perulangan alih-alih rekursi. Perulangan tidak memiliki overhead untuk meneruskan argumen, menginisialisasi penyimpanan tambahan, dan mengembalikan nilai. Performa Anda bisa jauh lebih baik tanpa panggilan rekursif.
Rekursi Timbal Balik. Anda mungkin mengamati performa yang sangat buruk, atau bahkan perulangan tak terbatas, jika dua prosedur saling memanggil. Desain seperti itu memberikan masalah yang sama dengan satu prosedur rekursif, tetapi bisa lebih sulit untuk dideteksi dan di-debug.
Memanggil dengan Tanda Kurung. Ketika prosedur Function
memanggil dirinya secara rekursif, Anda harus mengikuti nama prosedur dengan tanda kurung, bahkan jika tidak ada daftar argumen. Jika tidak, nama fungsi dianggap mewakili nilai pengembalian fungsi.
Pengujian. Jika Anda menulis prosedur rekursif, Anda harus mengujinya dengan sangat hati-hati untuk memastikannya selalu memenuhi beberapa kondisi pembatasan. Anda juga harus memastikan bahwa Anda tidak dapat kehabisan memori akibat memiliki terlalu banyak panggilan rekursif.