Tentang Recursive Function

Sharing is caring!

Pada artikel sebelumnya, telah saya paparkan mengenai apa itu function serta apa manfaat dan perannya dalam sebuah program. Nah… sedangkan dalam artikel ini akan saya jelaskan mengenai recursive function, atau function yang memanggil dirinya sendiri.. Function yang memanggil dirinya sendiri? aneh bener nih function? apaan tuh maksudnya? Pengin tahu lebih dalam tentang recursive function? Oleh karena itu simak baik-baik artikel ini.

OK… untuk mempermudah pembahasan, saya akan ambil beberapa contoh kasus. Kasus yang pertama adalah tentang menghitung pangkat ab, dengan a bilangan riil dan b bilangan bulat non negatif. Contoh ini sebenarnya telah dibahas pada artikel tentang function sebelumnya. Di sini saya tidak akan mengulangi lagi pembahasan yang sama, namun akan saya berikan perspektif lain dalam menghitung pangkat tersebut.

Nah… kita semua tentu tahu bahwa ab = a . ab-1. Betul kan? Artinya apa? artinya adalah ketika kita akan menghitung sebuah pangkat, ternyata kita dapat menyatakan perhitungannya dalam bentuk pangkat lagi, dalam hal ini kita akan menghitung ab-1 untuk menghitung ab. Apabila untuk menghitung pangkat ini kita bentuk suatu function, maka dalam function tersebut akan memanggil function pangkat itu sendiri.

Sehingga kira-kira bentuk function pangkat untuk menghitung ab akan berbentuk sbb:

function pangkat(a : real; b : integer) : real;
begin
     pangkat := a * pangkat(a, b-1);
end;

Tapi… eit… tunggu dulu, sudah betulkah bentuk function di atas? Coba kita cek. Misalkan a = 3 dan b =4, maka

pangkat(3, 4) = 3.pangkat(3, 3) = 3.3.pangkat(3, 2) = 3.3.3.pangkat(3, 1) = 3.3.3.3.pangkat(3, 0) = 3.3.3.3.3.pangkat(3, -1) = …

Lho kok terus jalan? emangnya tidak berhenti?? ya jelas tidak berhenti dong, karena pangkatnya terus dikurangi 1. Oleh karena itu kita harus memikirkan bagaimana caranya berhenti. Kapan berhentinya? tentu saja apabila b = 0. Sehingga function di atas harus dimodifikasi menjadi

function pangkat(a : real; b : integer) : real;
begin
     if b = 0 then pangkat := 1
     else pangkat := a * pangkat(a, b-1);
end;

Sehingga proses perhitungan untuk a = 3 dan b = 4 adalah

pangkat(3, 4) = 3.pangkat(3, 3) = 3.3.pangkat(3, 2) = 3.3.3.pangkat(3, 1) = 3.3.3.3.pangkat(3, 0) = 3.3.3.3.1 = 81.

Contoh kedua adalah tentang mencari nilai n faktorial atau n!, dengan n bilangan bulat non negatif. Kita biasa menghitung n! dengan rumus n! = n.(n-1).(n-2)….1. Nah… kita coba perspektif lain untuk menghitung faktorial ini dengan recursive, yaitu n! = n . (n-1)!

Sekarang kita coba implementasikan cara recursive di atas pada function untuk mencari faktorialnya.

function faktorial(n : integer) : real;
begin
     if n = 1 then faktorial := 1
     else faktorial := n * faktorial(n-1);
end;

Sehingga kita ambil contoh n = 4, maka n! = 4.3! = 4.3.2! = 4.3.2.1! = 4.3.2.1 = 24.

OK… that’s all… mudah-mudahan artikel ini dapat bermanfaat buat Anda. Selamat berrecursive ria, he..he..he… 🙂

Tinggalkan Komentar