Bagikan melalui


Prosedur Rekursif (Visual Basic)

Prosedur rekursif adalah prosedur yang memanggil dirinya sendiri. Secara umum, 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 yang terpenuhi dalam jumlah panggilan rekursif yang wajar. Tanpa adanya setidaknya satu kondisi yang dapat dipenuhi secara konsisten, prosedur Anda berisiko tinggi berjalan dalam perulangan tak terbatas.

Penggunaan Memori. Aplikasi Anda memiliki jumlah ruang terbatas untuk variabel lokal. Setiap kali prosedur memanggil dirinya sendiri, ia menggunakan lebih banyak ruang itu untuk salinan tambahan variabel lokalnya. Jika proses ini berlanjut tanpa batas waktu, itu akhirnya menyebabkan StackOverflowException kesalahan.

Efisiensi. Anda hampir selalu dapat menggunakan perulangan alih-alih rekursi. Perulangan tidak memiliki beban tambahan dari meneruskan argumen, menginisialisasi penyimpanan tambahan, dan mengembalikan nilai. Performa Anda bisa jauh lebih baik tanpa panggilan rekursif.

Rekursi Bersama. Anda mungkin mengamati kinerja yang sangat buruk, atau bahkan perulangan tak terbatas, jika dua prosedur saling memanggil. Desain seperti itu menyajikan masalah yang sama dengan satu prosedur rekursif, tetapi bisa lebih sulit untuk dideteksi dan di-debug.

Memanggil dengan Tanda Kurung. Function Ketika prosedur memanggil dirinya secara rekursif, Anda harus mengikuti nama prosedur dengan tanda kurung, bahkan jika tidak ada daftar argumen. Jika tidak, nama fungsi diambil sebagai 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 karena memiliki terlalu banyak panggilan rekursif.

Lihat juga