Anda di halaman 1dari 24

REKURSIF

Matakuliah : T0974 / Algoritma dan Metode Object Oriented Programming I


Tahun : 2008
Versi : 1/0
Learning Outcomes

Pada akhir pertemuan ini, diharapkan


mahasiswa akan mampu:
• Menjelaskan definisi rekursif
• Menerapkan rekursif dalam pembuatan
program
• Membedakan rekursif dan iteratif

Bina Nusantara
Outline Materi

• Definisi rekursif
• Deklarasi rekursif
• Penggunaan rekursif
• Analisa rekursif dan iterasi

Bina Nusantara
Why learn recursion?

• "Cultural experience" – think differently about problems

• Solves some problems more naturally than iteration

• Leads to elegant, simplistic, short code (when used well)

• Many programming languages ("functional" languages such as


Scheme, ML, and Haskell) use recursion exclusively (no
loops)

• A key component of many of our assignments in CSE 143


Definisi Rekursif

• Method yang memanggil dirinya sendiri


• Berguna untuk teknik pemrograman
• Lebih memudahkan pemecahan masalah
tertentu
• Contoh:
Faktorial
0! = 1;
n! = n x (n – 1)!; n > 0

• Memerlukan kondisi penghentian (stopping


condition atau base case)
Bina Nusantara
Deklarasi Rekursif

• Contoh deklarasi rekursif:


public static long factorial(int n)
{
if(n==0) // stopping condition / base case
return 1;
else
return n * factorial(n-1); // recursive call
}
• Pemanggilan factorial (diri sendiri)  rekursif
• Dipanggil sampai mencapai kondisi n == 0
(stopping condition atau base case)

Bina Nusantara
Penggunaan Rekursif

Bina Nusantara
Penggunaan Rekursif

factorial(4)
Step 0: executes factorial(4)
Step 9: return 24
return 4 * factorial(3)
Step 1: executes factorial(3)
Step 8: return 6
return 3 * factorial(2)
Step 2: executes factorial(2)
Step 7: return 2
return 2 * factorial(1)
Step 3: executes factorial(1)
Step 6: return 1
return 1 * factorial(0)
Step 4: executes factorial(0)
Step 5: return 1
return 1
Bina Nusantara
Penggunaan Rekursif

• Faktorial lebih baik menggunakan loop


int hasil = 1;

if(bil>1)
{
for(int i=2; i<=bil; i++)
hasil *= i;
}

• Faktorial baik dalam merepresentasikan


rekursif

Bina Nusantara
Penggunaan Rekursif

• Fibonacci:
Index 0 1 2 3 4 5 6 7 8 9 10 11
Seri 0 1 1 2 3 5 8 13 21 34 55 89
• Dimulai dari 0 dan 1
• Bilangan berikutnya penjumlahan dari 2 bilangan
sebelumnya
• fib(0) = 0
fib(1) = 1
fib(index) = fib(index – 2) + fib(index – 1);
index > =2

Bina Nusantara
Penggunaan Rekursif

Bina Nusantara
Penggunaan Rekursif

Bina Nusantara
Penggunaan Rekursif

• Palindrom: kata, frasa, bilangan, atau kalimat


yang dibaca sama dari 2 arah pembacaan
• Contoh:
– Civic
– Level
– Rotator
– Was it a rat I saw
– 58285
– 20-02-2002

Bina Nusantara
Penggunaan Rekursif

Bina Nusantara
Penggunaan Rekursif

Bina Nusantara
Penggunaan Rekursif

• Method isPalindrome pertama mengecek


apakah string tersebut palindrom
• Method isPalindrome kedua mengecek apakah
substring tersebut palindrom
• Teknik mendeklarasikan method bantuan
untuk rekursif  recursive helper method
• Berguna untuk string dan array

Bina Nusantara
Rekursif vs Iteratif

• Rekursif:
– Bentuk alternatif kontrol program
– Repetisi tanpa loop
– Memanggil methodnya sendiri
– Memerlukan pernyataan seleksi (if) untuk base case/stopping condition
– Memerlukan memori lebih banyak
– Waktu eksekusi lebih lambat
– Terkadang lebih jelas, sederhana dibandingkan iteratif
• Iteratif:
– Merupakan struktur kontrol (fundamental dari bahasa pemrograman)
– Spesifikasi loop body
– Dikontrol oleh loop-control-structure
– Memori lebih sedikit dan waktu proses lebih cepat
• Permasalahan yang dapat diselesaikan oleh rekursif
pasti bisa diselesaikan oleh iteratif
Bina Nusantara
Did You Know?

• Infinite recursion (rekursif tak terhingga)


terjadi jika tidak ada stopping condition atau
base case
• Contoh pada Faktorial
public static long factorial(int n)
{
return n * factorial(n-1); // recursive call
}
• Menyebabkan StackOverflowError
• Solusi
if(n==0) // stopping condition / base case
return 1;

Bina Nusantara
Advanced Learning

• Tower of Hanoi: contoh rekursif klasik


• Mudah diselesaikan dengan rekursif
• Terdapat 3 menara (tower) dan beberapa cakram
(disk) dengan ukuran berbeda
• Disk atas harus lebih kecil daripada disk bawah
• Semua disk berawal dari tower pertama
• Hanya 1 disk yang boleh dipindahkan dalam sekali
waktu
• Semua disk harus dipindahkan ke tower akhir

Bina Nusantara
Advanced Learning

Bina Nusantara
Advanced Learning

Bina Nusantara
Advanced Learning

Bina Nusantara
Referensi
• Introduction to Java Programming. 7ed. Liang. 2009. ch 20
• Java Software Solutions. 5ed. Lewis & Loftus. 2007. ch 11
• Fibonacci.
http://en.literateprograms.org/Fibonacci_numbers_(Java)
• Palindrome. http://en.wikipedia.org/wiki/Palindrome
• Towers of Hanoi.
– http://www.codeproject.com/KB/graphics/Towers_of_Hanoi/Towers_of_Hanoi.jpg
– http://www.codeproject.com/KB/graphics/Towers_of_Hanoi.aspx
– http://www.java2s.com/Tutorial/Java/0100__Class-Definition/TheTowersofHanoi.htm
– http://pirate.shu.edu/~wachsmut/Java/Hanoi/index.html

Bina Nusantara
Cari algoritma/kasus/program yang bisa
diselesaikan oleh metode rekursif. Min. 2
algoritma /kasus
Nama File : Tugas 5 Struktur Data –nim-nama-
kelas

Dikirim ke Tugas 5 SD di kelas masing-masing


di eknows.uinsgd.ac.id

Bina Nusantara

Anda mungkin juga menyukai