Anda di halaman 1dari 27

Teknik Rekursif dan Iteratif

Kuliah Algoritma Pemrograman


Konsep Rekursif
• Proses rekursif merupakan suatu fenomena yang menarik dalam
pemrograman komputer
• Rekursif adalah suatu proses perulangan untuk menyelesaikan
permasalahan berdasarkan suatu hubungan rekurrens.
• Rekursi dapat didefinisikan sebagai prosedur atau fungsi yang dapat
melakukan eksekusi dengan memanggil atau memproses subprogram
yang arahnya ke prosedur atau fungsi dirinya sendiri.
• Artinya bahwa, nilai suatu fungsi dengan argument tertentu dapat
dihitung dari fungsi yang sama dengan argument argument yang
mempunyai hubungan rekurrens.
Konsep Iterasi
• Iterasi merupakan suatu proses perulangan yang dilaksanakan oleh
suatu prosedur atau fungsi atau sub program dengan cara
memasukan secara langsung nilai-nilai argumennya. Dalam proses
iterasi, proses perulangan dikendalikan oleh pencacah (counter) yang
akan selalu berubah setiap kali selesai dilakukan perulangan.
Aspek Rekursi dan Iterasi
• Efisiensi proses eksekusi program
• Kemudahan penggunaan atau penerapan dalam program aplikasi
• Kejelasan logika untuk mengecek validitas prosedur
• Kesederhanaan pengguna statemen dalam program
Konsep Rekursif (1)
• Sebuah method yang memanggil dirinya sendiri
• Lebih memudahkan dalam mengatasi permasalahan tertentu
• Memerlukan kondisi penghentian (stopping condition atau base case)
Konsep Rekursif
• Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat di-
reduksi menjadi satu atau lebih masalah-masalah serupa yang lebih kecil.
• Secara umum, algoritme rekursif selalu mengandung beberapa kasus:
• kasus induksi: satu atau lebih kasus yang pemecahan masalahnya dilakukan
dengan menyelesaikan masalah serupa yang lebih sederhana (yaitu
menggunakan recursive calls)
• Supaya tidak terjadi rekursi yang tak berhingga, setiap langkah rekursif haruslah
mengarah ke kasus penyetop (base stop).
Rekursif
• Sub Program Rekursif adalah sub program 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
base stop)
• Pemanggilan fungsi, apabila kondisi terpenuhi
Bentuk Rekursif
• Secara umum bentuk dari sub program rekursif memiliki statemen
kondisional :
if kondisi khusus untuk berhanti
then panggil parameter yang sesuai
else lakukan instruksi yang akan dieksekusi bila
kondisi dipenuhi
Manfaat fungsi rekursif
• 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.
Algoritma Fibonacci (1)
• Barisan bilangan Fibonacci pertama kali dikemukakan oleh Leonardo
Pisano atau lebih dikenal sebagai Fibonacci.
• Leonardo Pisano merupakan seorang ahli matematika yang cukup
terkenal di masa abad pertengahan.
• Barisan Fibonacci merupakan sebuah barisan bilangan yang memiliki
bentuk yang unik.
• Suku pertama dari barisan bilangan ini adalah 0, kemudian suku
keduanya 1, lalu untuk suku ketiga ditentukan dengan menjumlahkan
kedua suku sebelumnya sehingga diperoleh barisan bilangan dengan
pola di bawah ini:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946....
Deret Fibonacci
• Leonardo Pisano (Fibonacci) ketika mengamati peternakan kelinci dimana
jumlah kelinci di peternakan berkembang biak sehingga membentuk pola
yang menarik untuk diamati oleh matematikawan ini.
• Jumlah kelinci di bulan pertama  ada 1 pasang
Jumlah kelinci di bulan kedua     ada 1 pasang
Jumlah kelinci di bulan ketiga     ada 2 pasang
Jumlah kelinci di bulan keempat ada 3 pasang
Jumlah kelinci di bulan kelima    ada 5 pasang
• Hasil dari pengamatan tersebutlah yang menjadi dasar terbentuknya bilangan
Fibonacci ini.
Deret Fibonacci
• Pola Bunga
• Pola bunga juga menunjukkan adanya pola fibonacci ini, misalnya pada bunga
matahari.
• Dari titik tengah menuju ke lingkaran yang lebih luar, polanya mengikuti deret
fibonacci.
Fakta Deret Fibonacci (1)
1. Kemenangan Obama dan deret Angka Fibonacci
• Ada sebuah penelitian yang dipublikasikan pada bulan Juni 2008, pada saat itu masih dalam
tahap kampanye calon Presiden Obama dan MacCain, penelitian tersebut meramalkan bahwa
Obama akan menjadi Presiden Amerika yang ke-44.
• Penelitian ini didasarkan pada kejadian-kejadian politik di Amerika yang ada kaitannya dengan
kehidupan politik orang kulit hitam di Amerika (African-Americans). Pada penelitian itu
disebutkan bahwa berdasarkan deret tahun kejadian politik di Amerika, maka Obama memiliki
peluang yang besar untuk menjadi Presiden Amerika. Nah, ternyata kenyataannya itu terbukti.
Fakta Deret Fibonacci (2)
2. Untuk memperkirakan pergerakan harga
• Metode Fibonacci  banyak digunakan para trader untuk memperkirakan
pergerakan harga. Ada dua rasio fibonacci yang banyak digunakan dalam forex
yaitu fibonacci retracement & fibonacci extension.
• Untuk keperluan forex, inilah rasio fibonacci yang perlu anda ketahui:
• Fibonacci Retracement Levels:
0.236, 0.382, 0.500, 0.618, 0.764
• Fibonacci Extension Levels:0, 0.382, 0.618, 1.00, 1.382, 1.618
Fakta Deret Fibonacci (3)
3. Pendekatan untuk mendapatkan nilai golden rasio
• Rasio emas (golden rasio) diperoleh dari hasil bagi deret Fibonacci
sebelumnya dimulai setelah deret ke-tiga belas. Deret ke-tiga belas
pada deretan angka Fibonacci adalah 233, yang jika dibagi dengan
angka sebelumnya yaitu 144 menghasilkan angka 1,618 atau dengan
kata lain rasio emas. Jika dilakukan pembagian serupa pada deret
selanjutnya bahkan sampai deret tak hingga sekalipun, maka angka
ini akan tetap bernilai sama, yaitu 1,618. Angka ini bernilai sama
tanpa ada sedikitpun yang menyimpang.
Algoritma Fibonacci Menggunakan Rekursif

  𝑖𝑓 ( 𝑛≤0∨¿ 𝑛≤1 ) ; 𝑟𝑒𝑡𝑢𝑟𝑛 𝑛

𝑓𝑖𝑏 (𝑛)𝑛 ∫ 𝑛
𝑒 𝑙𝑠𝑒 𝑟𝑒𝑡𝑢𝑟𝑛 𝑓𝑖𝑏 ( 𝑛 −1) +𝑓𝑖𝑏 (𝑛 − 2) ;
Algoritma Fibonacci Menggunakan Iteratif
• Mendefinisikan nilai pertama (n1=0) dan nilai kedua (n2=1) kemudian
mencetaknya kedua bilangan tersebut
• Melakukan perulangan dimulai dari deret angka kedua sampai dengan
deret ke n (di mana n merupakan suatu parameter yang dapat
diinputkan oleh user dan n ini merupakan banyaknya deret yang akan
ditampilkan)
• Di dalam kolom looping ditambahkan nilai n1 dan n2 yang ditampung dalan
sebuah variable (n3), lalu nilai hasil penambahan tersebut langsung dicetak.
• Kemudian lakukan pemrosesan assignment n1=n2 dan n2=n3
Diskusi
• Berdasarkan algoritma yang sudah dijelaskan di atas, buat program
yang dapat membandingkan waktu eksekusi kedua algoritma deret
Fibonacci yang bersifat iteratif dan yang bersifat rekursif, adapun hasil
pengujianya adalah sebagai berikut :
No Banyaknya (n) Waktu Fib Iteratif Fib (Rekursif)
1. 100
2. 300
3. 500
4. 800
5. 1.000
(2). Menara Hanoi
 Seorang biarawan memiliki 3 menara.
 Diharuskan memindahkan 64 piringan emas.
 Diameter piringan tersebut tersusun dari ukuran kecil ke besar.
 Biarawan berusaha memindahkan semua piringan dari menara pertama ke menara ketiga tetapi harus
melalui menara kedua sebagai menara tampungan.
• Kondisi:
 Piringan tersebut hanya bisa dipindahkan satu-satu.
 Piringan yang besar tidak bisa diletakkan di atas piringan yang lebih kecil.
 Ternyata : akan memakan waktu sangat lama.
 Secara teori, diperlukan 264-1 perpindahan. Jika kita salah memindahkan, maka jumlah perpindahan
akan lebih banyak lagi.
• Jika satu perpindahan butuh 1 detik, maka total waktu yang dibutuhkan lebih dari 500 juta
tahun !!.
(1) Menara Hanoi
• Menara Hanoi adalah persoalan untuk memindahkan tumpukan piring
dari suatu tonggak ke tonggak lain dengan bantuan sebuah tonggak
perantara.
• Penyelesaian secara rekursif untuk persoalan ini untuk n buah piring:
• Pindahkan n-1 piring teratas pada tonggak A ke tonggak B, dengan
menggunakan tonggak C sebagai perantara.
• Pindahkan 1 piring tersisa pada tonggak A ke tonggak C.
• Pindahkan n-1 piring teratas pada tonggak B ke tongak C, dengan
menggunakan tonggak A sebagai perantara.
(2) Menara Hanoi
• Sebuah permainan dimana sejumlah piringan dipindahkan dari
tonggak satu ke tonggak lainnya dan dapat menggunakan tonggak
bantuan
Caranya semua piringan di tonggak A akan dipindahkan ke
tonggak C secara satu persatu dan piringan yang besar tidak
boleh diletakkan di atas piringan yang kecil.
(3) Menara Hanoi
(4) Menara Hanoi
• Algoritma:
• Jika n==1, pindahkan piringan dari A ke C
• Jika tidak:
• Pindahkan n-1 piringan dari A ke B menggunakan C sebagai tampungan
• Pindahkan n-1 piringan dari B ke C menggunakan A sebagai tampungan
(5)
(6) Menara Hanoi
• Untuk menyelesaikan puzzle di atas dalam pemrograman, kita dapat menggunakan
teknik rekursif. Rekursif adalah fungsi atau prosedure yang dapat memanggil dirinya
sendiri.
FUNCTION MoveTower(disk, source, dest, spare):
IF disk == 0, THEN:
    move disk from source to dest
ELSE:
    MoveTower(disk - 1, source, spare, dest)   // Step 1 above
    move disk from source to dest              // Step 2 above
    MoveTower(disk - 1, spare, dest, source)   // Step 3 above
END IF
• Buatlah program rekursif untuk memecahkan permasalahan
Menara Hanoi !
• Program ini merupakan program untuk menampilkan
pergerakkan menara hanoi, yang merujuk pada class
menaraHanoi. Secara umum algoritma menara hanoi, adalah
memindahkan sub menara hanoi dengan n – 1 pin dari n pin
ke tiang perantara. Lalu memindahkan pin ke n ke tiang
tujuan, lalu memindahkan sub menara hanoi dengan n – 1
pin yang ada di tiang perantara, ke tiang tujuan. StopCase
nya jika n == 1.
•  Jumlah disk : 3
• Langkah-langkah nya adalah dengan :
• Pindahkan disc 1 dari pasak A ke pasak C
• Pindahkan disc 2 dari pasak A ke pasak B
• Pindahkan disc 1 dari pasak C ke pasak B
• Pindahkan disc 3 dari pasak A ke pasak C
• Pindahkan disc 1 dari pasak B ke pasak A
• Pindahkan disc 2 dari pasak B ke pasak C
• Pindahkan disc 1 dari pasak A ke pasak C

Anda mungkin juga menyukai