Pengertian Rekursif OPERASI STRING
356
Direktorat Pembinaan SMK | 2008
kondisi‐rekurensi : F ekspresi
‐2 Fungsi rekursif tidak langsung
merupakan realisasi fungsi yang dapat
cross-recursif yaitu jika
realisasi fungsi f mengandung fungsi g yang realisasinya adalah aplikasi
terhadap f. Realisasi
G list‐param: F ekspresi‐1
F list‐param:
depend on kondisi‐basis : ekspresi‐1
kondisi‐rekurensi : G ekspresi
‐2 Fungsi merupakan sub program
yang sangat bermanfaat dalam pemrograman, terutama untuk
program atau proyek yang besar. Manfaat penggunaan subprogram
antara lain adalah : Meningkatkan readibility, yaitu
mempermudah pembacaan program
Meningkatkan modularity, yaitu memecah sesuatu yang besar
menjadi modul-modul atau bagian- bagian yang lebih kecil sesuai
dengan fungsinya, sehingga mempermudah pengecekan,
testing dan lokalisasi kesalahan.
Meningkatkan reusability, yaitu suatu sub program dapat dipakai
berulang kali dengan hanya memanggil sub program tersebut
tanpa menuliskan perintah- perintah yang semestinya diulang-
ulang.
Sub Program Rekursif adalah subprogram yang memanggil dirinya
sendiri selama kondisi pemanggilan dipenuhi. Dengan melihat sifat sub
program rekursif di atas maka sub program rekursif harus memiliki :
kondisi yang menyebabkan pemanggilan dirinya berhenti
disebut kondisi khusus atau special condition
pemanggilan diri sub program yaitu bila kondisi khusus tidak
dipenuhi Secara umum bentuk dari sub
program rekursif memiliki statemen kondisional :
if
kondisi khusus tak dipenuhi then
panggil diri
‐sendiri dengan
parameter yang sesuai
else lakukan instruksi yang akan
dieksekusi bila kondisi khusus dipenuhi
Sub program rekursif umumnya dipakai untuk permasalahan yang
memiliki langkah penyelesaian yang terpola atau langkah-langkah yang
teratur. Bila kita memiliki suatu permasalahan dan kita mengetahui
algoritma penyelesaiannya, kadang- kadang sub program rekursif menjadi
pilihan kita bila memang memungkinkan untuk dipergunakan.
Secara algoritmis dari segi algoritma, yaitu bila kita
mempertimbangkan penggunaan memori, waktu eksekusi sub
program sub program rekursif sering bersifat tidak efisien .
Dengan demikian sub program rekursif umumnya memiliki efisiensi
dalam penulisan perintah, tetapi kadang tidak efisien secara
algoritmis. Meskipun demikian banyak pula permasalahan-
permasalahan yang lebih sesuai diselesaikan dengan cara rekursif
misalnya dalam pencarian searching.
2008 | Direktorat Pembinaan SMK
357 Untuk dapat memahami proses
yang terjadi dalam sebuah fungsi rekursif , perhatikan contoh fungsi
rekursif berikut :
void rekursi int a, int b
{ If
b== return;
a++; b
‐‐; cout
Masuk \ n
a b;
rekursia,b; cout
Keluar \ n
a b;
} Misalkan Fungsi tersebut
dipanggil dengan nilai a = 3 dan b = 3 maka pertama tama di cek apakah b
= 0 if b == 0 return, jika sama maka keluar. Ternyata nilai b tidak
sama dengan 0 maka tambahkan a dengan 1 dan kurangi b dengan 1.
Maka keadaan sekarang menjadi a = 4 dan b = 2 . Baris berikutnya
menampilkan nilai a dan b ke layar printf cout
Masuk \ n a b;.
Kemudian panggil fungsi rekursi dengan nilai a = 4 dan b = 2 .
Langkah – langkah tersebut diulang terus sampai pemanggilan fungsi
rekursi dengan nilai a = 6 dan b = 0. Pada saat ini kondisi if bernilai benar
sehingga fungsi akan keluar return dan melanjutkan perintah setelah
pemanggilan fungsi rekursi dengan a = 6 dan b = 0. Yaitu mencetak nilai a
dan b cout
Keluar \n a b;.
Setelah mencetak nilai a dan b maka fungsi rekursif akan keluar lagi
, dan melanjutkan perintah setelah pemanggilan fungsi rekursif
sebelumnya dimana nilai a = 5 dan b = 1 .
Demikian seterusnya sampai nilai a = 4 dan nilai b = 2. yang tidak lain
pemanggilan fungsi rekurif yang pertama. Proses pemanggilan fungsi
rekursif dapat diilustrasikan:
Langkah ke:
Rekursif 3,3
1 a=4 ; b=2 . Cetak : masuk a=4 || b=2
1 6
2 a=5 ; b=1 . Cetak : masuk a=5 || b=1
Rekursif 4,2
3 a=6 ; b=0 . Cetak : masuk a=6 || b=0
2 5
4 a=6 ; b=0 . Cetak : keluar a=6 || b=0
Rekursif 5,1
5 a=5 ; b=1 . Cetak : keluar a=5 || b=1
3 4
6 a=4 ; b=2 . Cetak : keluar a=4 || b=2
Rekursif 6,0
Gambar 10.1. Proses Pemanggilan Fungsi Rekursif Penggunaan fungsi rekursif
misalnya pada fungsi pangkat, faktorial, dan barisan fibonacci. Mari
kita lihat satu demi satu. Dalam fungsi pangkat xy , kita tahu bahwa
semua bilangan selain 0, jika dipangkatkan dengan 0 nilainya
sama dengan 1. Jika x dipangkatkan
358
Direktorat Pembinaan SMK | 2008
dengan y, dengan y lebih dari 0, maka hasilnya sama dengan x
dikalikan dengan x dipangkatkan y – 1. Jika dituliskan dalam notasi
matematika definisinya adalah sebagai berikut:
Kita lihat di atas pada definisi y 0, bentuk pemangkatan muncul
kembali di sisi kanan. Itulah yang disebut rekursif. Definisi rekursif
selalu dimulai dengan kasus penyetop, penghenti, atau kasus
dasar dari suatu permasalahan, dalam hal ini terjadi ketika nilai y =
0. Definisi rekursif yang lebih kompleks mengandung inti dari
permasalahan yang akan dipecahkan, namun lebih sederhana.
Dalam hal ini yang tadinya x dipangkatkan dengan y, kini bentuk
pemangkatan menjadi lebih sederhana, yaitu y – 1. Hal ini
dimaksudkan untuk “menggiring” masalah kompleks ke kasus dasar
atau penyetop rekursinya. Untuk x = 10 dan y = 0, hasil dari xy adalah 1.
Untuk x = 10 dan y = 3 hasilnya dapat digambarkan sebagai berikut:
Konsep rekursifitas banyak ditemui di dunia nyata. Istilah ini
muncul pertama kali di kajian bidang matematika. Dalam kasus tertentu,
konsep ini memudahkan perumusan formula. Konsep ini pun difasilitasi
dalam pemrograman. Dalam pemrograman, ada 2
terminologi yang bisa didefinisikan dengan rekursif, yaitu prosedur dan
fungsi. Seperti halnya dalam bidang matematika, penggunaan konsep ini
juga untuk memudahkan pendefinisian dua terminologi
tersebut. Bahkan terdapat suatu masalah yang hanya bisa
diselesaikan dengan rekursifitas dan sangat sulit untuk diselesaikan tanpa
rekursifitas.
Definisi rekursif harus memuat
komponen basis dan komponen rekursif. Dalam pemrograman,
komponen ini dapat dipisahkan dengan menggunakan perintah
analisa kasus. Misalkan e1 adalah ekspresi kondisi untuk basis dan e2
adalah ekspresi kondisi untuk bagian rekursif, definisi rekursif dapat
dituliskan: if
e1 then
{bagian basis} else
{bagian rekursif} Salah satu contoh dari kasus
rekursif adalah barisan bilangan fibonacci. Barisan bilangan fibonacci
adalah 1, 1, 2, 3, 5, 8, 13, 21, ... . Definisi barisan bilangan fibonacci
adalah sebagai berikut. Misalkan fibonaccii menyatakan bilangan
fibonacci yang ke-i, maka:
2
, 1
, 1
2 ,
2 1
i i
i fibobacci
i fibonacci
i fibonacci
2008 | Direktorat Pembinaan SMK
359 Program 10.1. Penerapan bilangan Fibonaci dengan rekursi
include iostream
includeconio.h
using namespace std;
int Fibonaciint;
int
main {
int
n= 7
;
for int i=
1 ;
i=n; i++ cout
\ndata Fibonacii;
getch;
return
; }
int Fibonaciint n
{
if
n= 2
return
n;
else returnFibonacin
‐ 2
+Fibonacin ‐
1 ;
} Keluaran program diatas adalah:
data 1
data 2
data 3
data 5
data 8
data 13
data 21
Rekursif adalah suatu method yang memanggil dirinya sendiri
secara langsung maupun tidak lansung. Rekursif merupakan teknik
pemrograman yang sangat berguna. Dalam beberapa kasus,
menggunakan cara rekursi memudahkan pengembangan
program secara natural, langsung, dan simple dalam memecahkan
problem yang susah dipecahkan. Untuk lebih memahami rekursif
perhatikan contoh berikut: Contoh yang umum untuk memahami teknik
rekursif adalah masalah factorial.
360
Direktorat Pembinaan SMK | 2008
4 = 4 x 3 x 2 x 1
3 = 3 x 2 x 1
2 = 2 x 1
1 = 1
Dari contoh di atas bisa diubah cara pandangnya menjadi:
4 = 4 x 3
3 = 3 x 2
2 = 2 x 1
1 = 1
Dengan catatan bahwa 0 = 1 maka cara pandang yang kedua bisa
dlanjutkan menjadi: 4
= 4 x 3 3
= 3 x 2 2
= 2 x 1 1
= 1 = 1
Cara pandang yang kedua inilah yang disebut rekursif, karena dalam
proses perhitungan selalu memanggil dirinya sendiri. Yaitu factorial
memanggil factorial. Akan tetapi perlu dicatat bahwa teknik rekursif ini harus
ada terminasinya atau ada saat berhentinya. Pada contoh factorial ini
adalah 0. Yaitu sama dengan 1 bukan 0. Dalam istilah matematika 0
ini disebut dengan base step. Sedangkan bagian yang lain disebut
recursive step. Secara umum rumus factorial dalam bentuk rekursif
menjadi sebagai berikut:
= 1; base step n
= n x n – 1; n 0 recursive step Jadi proses rekursif itu akan
selalu memanggil dirinya sendiri dengan variable yang berbeda, dan
terus dilakukan sampai mencapai base step sebagai terminasinya.
Setelah terminasi maka akan mendapatkan hasil dan selanjutnya
hasil tersebut dikembalikan ke pemanggilnya untuk dilakukan
perhitungan. Hal itu dilanjutkan sampai ke pemanggil yang pertama
sehingga mendapatkan hasil sebagaimana mestinya. Ilustrasi
berikut memberi gambaran tentang proses rekursif.
2008 | Direktorat Pembinaan SMK
361 Gambar 10.2. Ilustrasi Tentang Proses Rekursif.