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.