Rekursi (Recursive Procedure) pada VBA Excel: Ketika Sebuah Prosedur Memanggil Dirinya Sendiri

Pernah Melihat Cermin yang Saling Berhadapan?

Jika dua cermin diletakkan saling berhadapan, bayangan akan tampak muncul berulang kali hingga terlihat tidak ada akhirnya.

Konsep tersebut mirip dengan rekursi (recursion) dalam pemrograman.

Sebuah prosedur atau fungsi dapat memanggil dirinya sendiri untuk menyelesaikan sebuah pekerjaan. Namun, agar proses tersebut tidak berlangsung tanpa akhir, harus ada kondisi penghentian (base case).


Apa Itu Rekursi?

Rekursi adalah teknik pemrograman di mana sebuah Sub atau Function memanggil dirinya sendiri sampai kondisi tertentu terpenuhi.

Secara sederhana, alur kerjanya seperti ini.

Mulai

↓

Panggil Procedure

↓

Apakah kondisi berhenti terpenuhi?

├── Ya  → Selesai
│
└── Tidak
      ↓
Panggil Procedure Lagi

Setiap pemanggilan akan membuat VBA menjalankan prosedur yang sama dengan kondisi yang berbeda.


Mengapa Menggunakan Rekursi?

Tidak semua masalah cocok diselesaikan dengan rekursi. Namun, teknik ini sangat membantu untuk kasus-kasus yang memiliki pola berulang.

Contohnya:

  • Menghitung faktorial.

  • Menghasilkan deret bilangan.

  • Menelusuri folder dan subfolder.

  • Menelusuri struktur menu.

  • Memproses struktur data bertingkat.


Komponen Penting Rekursi

Sebuah prosedur rekursif selalu memiliki dua bagian utama.

1. Base Case (Kondisi Berhenti)

Kondisi yang menentukan kapan proses rekursi harus dihentikan.

Tanpa kondisi ini, prosedur akan terus memanggil dirinya sendiri hingga menyebabkan Stack Overflow.


2. Recursive Call

Bagian yang memanggil prosedur atau fungsi itu sendiri.

Biasanya disertai perubahan nilai parameter agar perlahan mendekati kondisi berhenti.


Contoh Sederhana

Misalkan kita ingin menghitung mundur dari angka 5.

Sub HitungMundur(ByVal Angka As Integer)

    If Angka = 0 Then Exit Sub

    MsgBox Angka

    HitungMundur Angka - 1

End Sub

Pemanggilan:

Sub Mulai()

    HitungMundur 5

End Sub

Hasil yang muncul:

5
4
3
2
1

Bagaimana Rekursi Bekerja?

Saat menjalankan:

HitungMundur 3

VBA melakukan proses berikut.

HitungMundur(3)

↓

HitungMundur(2)

↓

HitungMundur(1)

↓

HitungMundur(0)

↓

Selesai

Setiap pemanggilan menunggu proses berikutnya selesai sebelum akhirnya seluruh proses berakhir.


Contoh Menghitung Faktorial

Rumus faktorial:

5! = 5 × 4 × 3 × 2 × 1

Implementasi pada VBA:

Function Faktorial(ByVal N As Integer) As Long

    If N <= 1 Then

        Faktorial = 1

    Else

        Faktorial = N * Faktorial(N - 1)

    End If

End Function

Pemanggilan:

Sub Tes()

    MsgBox Faktorial(5)

End Sub

Output:

120

Visualisasi Perhitungan Faktorial

Saat memanggil:

Faktorial(4)

VBA akan memprosesnya seperti berikut.

4 × Faktorial(3)

↓

3 × Faktorial(2)

↓

2 × Faktorial(1)

↓

1

↓

2

↓

6

↓

24

Hasil akhirnya adalah 24.


Rekursi vs Perulangan

Masalah yang sama sering kali dapat diselesaikan menggunakan rekursi maupun perulangan.

RekursiPerulangan
Memanggil dirinya sendiri Menggunakan For, Do, atau While
Kode lebih ringkas pada kasus tertentu Umumnya lebih mudah dipahami
Membutuhkan memori lebih besar Lebih hemat memori
Harus memiliki base case Tidak membutuhkan base case

Studi Kasus

Menampilkan Angka 1 sampai 5

Menggunakan rekursi.

Sub Tampilkan(ByVal N As Integer)

    If N > 5 Then Exit Sub

    MsgBox N

    Tampilkan N + 1

End Sub

Pemanggilan:

Sub Mulai()

    Tampilkan 1

End Sub

Kapan Rekursi Sebaiknya Digunakan?

Rekursi cocok digunakan ketika:

  • Masalah memiliki pola yang berulang.

  • Setiap langkah dapat dipecah menjadi masalah yang lebih kecil.

  • Solusi rekursif lebih mudah dipahami daripada perulangan.

Sebaliknya, untuk proses sederhana seperti menghitung jumlah baris atau mengisi data ke worksheet, perulangan (For...Next atau Do...Loop) biasanya lebih efisien.


Tips Menggunakan Rekursi

✅ Selalu buat kondisi berhenti (base case).

✅ Pastikan setiap pemanggilan mendekati kondisi berhenti.

✅ Gunakan rekursi untuk masalah yang memang sesuai.

✅ Uji dengan data kecil terlebih dahulu sebelum menggunakan data yang lebih besar.


Kesalahan yang Sering Terjadi

1. Tidak Membuat Base Case

Sub Tes()

    Tes

End Sub

Kode tersebut akan terus memanggil dirinya sendiri tanpa henti hingga menyebabkan Stack Overflow.


2. Nilai Parameter Tidak Berubah

Sub Tes(ByVal N As Integer)

    Tes N

End Sub

Karena nilai N tidak berubah, kondisi berhenti tidak akan pernah tercapai.


3. Menggunakan Rekursi untuk Masalah Sederhana

Tidak semua proses membutuhkan rekursi. Untuk tugas yang dapat diselesaikan dengan perulangan sederhana, penggunaan For...Next atau Do...Loop sering kali lebih efisien.


Ringkasan

KonsepPenjelasan
Rekursi Prosedur atau fungsi memanggil dirinya sendiri.
Base Case Kondisi yang menghentikan rekursi.
Recursive Call Pemanggilan ulang terhadap prosedur atau fungsi yang sama.
Kelebihan Cocok untuk masalah yang memiliki pola berulang.
Kekurangan Menggunakan lebih banyak memori dan berisiko Stack Overflow jika tidak dirancang dengan benar.

Kesimpulan

Rekursi merupakan teknik pemrograman yang memungkinkan sebuah prosedur atau fungsi memanggil dirinya sendiri untuk menyelesaikan masalah secara bertahap. Agar rekursi berjalan dengan benar, setiap pemanggilan harus mendekati kondisi berhenti (base case). Tanpa kondisi tersebut, program dapat mengalami Stack Overflow karena proses pemanggilan tidak pernah berakhir.

Meskipun tidak selalu menjadi pilihan terbaik dibandingkan perulangan, rekursi sangat berguna untuk menyelesaikan masalah yang memiliki struktur berulang atau bertingkat dengan kode yang lebih ringkas dan mudah dipahami.


Latihan Mandiri

Latihan 1

Buat sebuah fungsi rekursif untuk menghitung jumlah bilangan dari 1 sampai N. Misalnya, jika N = 5, maka hasilnya adalah 15.


Latihan 2

Buat prosedur rekursif yang menampilkan angka dari 10 hingga 1 menggunakan MsgBox.


Latihan 3

Ubah program faktorial rekursif menjadi program menggunakan perulangan For...Next, kemudian bandingkan jumlah baris kode dan kemudahan pemahamannya.

Hubungi Kami

Kantor Berkreasi
Alamat :
Pens Sky Venture - Sukolilo Surabaya
Karangrejo Tmur 17 Surabaya

Email : kantor.berkreasi@gmail.com
WA : wa.me/6287761589881  
(Support  Mbak Ana)

Tim Pengembang

Dr. Rojabi Azharghany, M.Si, S.Sos
Dr. H. Agus Sulthoni Imami, S.Psi. M.Pd.I.
Ali Ishaq, M.Pd.
Didik Rahwiniyanto, S.Si., M.Pd.
Mujiburrohman, M.Pd.
Mohammad Zikky, S.ST, M.T
Amien sawedi, S.Pd.
Didik P Wicaksono, M.Pd.