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