250 likes | 722 Views
REKURSIF. Learning Outcomes Pada akhir pertemuan ini , mahasiswa mampu : Menjelaskan definisi rekursif Menerapkan rekursif dalam pembuatan program Membedakan rekursif dan iteratif. Outline Materi. Definisi rekursif Deklarasi rekursif Penggunaan rekursif Analisa rekursif dan iterasi.
E N D
REKURSIF Learning Outcomes Padaakhirpertemuanini, mahasiswamampu: • Menjelaskandefinisirekursif • Menerapkanrekursifdalampembuatan program • Membedakanrekursifdaniteratif
Outline Materi • Definisi rekursif • Deklarasi rekursif • Penggunaan rekursif • Analisa rekursif dan iterasi
Definisi Rekursif • Method yang memanggildirinyasendiri • Bergunauntukteknikpemrograman • Lebihmemudahkanpemecahanmasalahtertentu • Contoh: Faktorial 0! = 1; n! = n x (n – 1)!; n > 0 • Memerlukankondisipenghentian (stopping condition atau base case)
DeklarasiRekursif • Contohdeklarasirekursif: publicstatic long factorial(int n) { if(n==0)// stopping condition / base case return 1; else return n * factorial(n-1); // recursive call } • Pemanggilan factorial (dirisendiri) rekursif • Dipanggilsampaimencapaikondisi n == 0 (stopping conditionataubase case)
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
PenggunaanRekursif ? • Faktoriallebihbaikmenggunakan loop inthasil = 1; if(bil>1) { for(inti=2; i<=bil; i++) hasil *= i; } • Faktorialbaikdalammerepresentasikanrekursif
Penggunaan Rekursif • Fibonacci: • 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
Penggunaan Rekursif • Palindrom: kata, frasa, bilangan, ataukalimat yang dibacasamadari 2 arahpembacaan • Contoh: • C I V I C • L E V E L • R O T A T O R • Was it a rat I saW • 58285 • 20-02-2002
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
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
Did You Know? • Infinite recursion (rekursiftakterhingga) terjadijikatidakadastopping conditionataubase case • ContohpadaFaktorial publicstatic long factorial(int n) { return n * factorial(n-1); // recursive call } • MenyebabkanStackOverflowError • Solusi if(n==0) // stopping condition / base case return 1;
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 besar 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
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